From 58314967a543037ac16f023ddbf0141c52d3d3eb Mon Sep 17 00:00:00 2001 From: Packit Date: Sep 16 2020 14:16:46 +0000 Subject: perl-libintl-perl-1.29 base --- diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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. But first, please read +. diff --git a/Changes b/Changes new file mode 100644 index 0000000..08c95ec --- /dev/null +++ b/Changes @@ -0,0 +1,223 @@ +Version 1.29 - 09 Aug 2017 + +* Important: Fixed a bug that caused .mo files with a revision number + of 0.1 not to be loaded (see https://github.com/gflohr/libintl-perl/issues/1) +* New bug tracker address is https://github.com/gflohr/libintl-perl/issues + +Version 1.28 - 31 Aug 2017 + +* New class methods options(), keywords(), and flags() for + Locale::TextDomain + +Version 1.27 - 7 Aug 2017 + +* Bugs fixed: + + https://rt.cpan.org/Public/Bug/Display.html?id=114731 + https://rt.cpan.org/Public/Bug/Display.html?id=116772 + https://rt.cpan.org/Public/Bug/Display.html?id=119014 + https://rt.cpan.org/Public/Bug/Display.html?id=120165 + https://rt.cpan.org/Public/Bug/Display.html?id=120446 + +Version 1.26 - 13 May 2016 + +* Fixed more false negatives in tests, no need to upgrade. + +* Bugs fixed: + + https://rt.cpan.org/Ticket/Display.html?id=115052 + +Version 1.25 - 09 May 2016 + +* Fixed false negatives in test suite, no need to upgrade the module! + +* Bugs fixed: + + https://rt.cpan.org/Ticket/Display.html?id=83980 + https://rt.cpan.org/Ticket/Display.html?id=47968 + +Version 1.24 - 08 Apr 2016 + +* Better portability for tests. + +* Updated documentation. + +* License changed to GPLv3. + +* Bugs fixed: + + https://rt.cpan.org/Ticket/Display.html?id=98109 + https://rt.cpan.org/Ticket/Display.html?id=47968 + https://rt.cpan.org/Ticket/Display.html?id=83980 + https://rt.cpan.org/Ticket/Display.html?id=102288 + +Version 1.23 - 24 Jan 2013 + +* New message retrieval backend Locale::gettext_dumb(3pm) which produces + translations even, when the corresponding locale is not present in + the system. + +* Fixed a bug where the Perl backend under certain circumstances clobbered + the environment variable LC_ALL. + +* Avoid test failures by skipping all tests that depend on the de_AT + locale, when that locale is not installed. + +* Bugs fixed: + https://rt.cpan.org/Ticket/Display.html?id=82856 + +Version 1.22 - 24 Jan 2013 + +* Version 1.22 outsmarted PAUSE (the CPAN upload facility) and had to + be removed. + +Version 1.21 - 15 Jan 2013 + +* Environment variables LANGUAGE and LANG are interpreted in the same way + in the XS and the pure Perl version. + +* Package design closer to GNU standards. + +* If present, File::ShareDir is used for searching message catalogs. + +* Cleaned up distribution. + +* Bugs fixed: + https://rt.cpan.org/Ticket/Display.html?id=78341 + https://rt.cpan.org/Ticket/Display.html?id=81315 + https://rt.cpan.org/Ticket/Display.html?id=79461 + https://rt.cpan.org/Ticket/Display.html?id=71509 + https://rt.cpan.org/Ticket/Display.html?id=49744 + https://rt.cpan.org/Ticket/Display.html?id=49744 + https://rt.cpan.org/Ticket/Display.html?id=64284 + +Version 1.20 - 29 Jue 2009 + +* Test suite revamped. Failures are now explained better, and it should + be easier to debug them remotely. + +* Bugs fixed: + https://rt.cpan.org/Ticket/Display.html?id=49744 + +Version 1.19 - 19 Jun 2009 + +* New context functions now work with Perl 5.6.2. + +* N__() now mirrors its argument in scalar context for convenience. + +Version 1.18 - 26 May 2009 + +* Cosmetic change: The version number is now both in Locale::Messages + and in Locale::TextDomain to work around a shortcoming of the + PAUSE indexer. + +Version 1.17 - 25 May 2009 + +* New context support, supporting .po files with msgctxt, and + appropriate supporting calls (*pgettext calls) under both + gettext_pp and gettext_xs. TextDomain.pm received corresponding + calls: __p __px __np __npx __xnp. + +* New module Locale::Util with some utility functions, especially for + web development. Attention, this is still alpha code! + +* Try to warn about wrong usage of the tied hashes in + Locale::TextDomain. + +* Minor bugfixes + +Version 1.16 - 28 Sep 2005 + +* New function Locale::Messages::bind_textdomain_filter() allows you + to register an output filter as a callback. You can use this + feature for example to set the utf-8 flag on translated string when + you are sure that the output is actually utf-8. + +* New function Locale::Messages::turn_utf_8_on(). + +* various minor bug fixes. + +Version 1.15 - 1 Sep 2005 + +* Workarounds and bugfixes for misconfigured Solaris systems + +* Fixed the completely broken simplecal example + +* Added section about non-ascii msgids to the POD of Locale::Messages + +Version 1.14 - 11 Aug 2005 + +* Oops: forgot to update the version check in Locale::Messages + +* The XS version builds easier on *BSD systems now + +Version 1.12 - 11 Aug 2005 + +* Minor bugfixes + +* The test scripts now check whether the needed locales are installed + +Version 1.11 - 11 Jun 2004 + +* Version 1.11 is a minor bugfix release + +Version 1.10 - 12 Jan 2004 + +* XS version now compiles under Windows (GNU gettext and libiconv required, + build with "perl Makefile.PL DIR=gettext_xs", see README.win32 for details) + +Version 1.09 - 29 Dec 2003 + +* check version match with XS module + +* in pure Perl version, use user supplied locale name when guessing + the output character set + +* corrections for Atari character maps + +Version 1.08 - 30 Nov 2003 + +* fixed bug #4512 on https://rt.cpan.org/ (reported by unknown guest) + +Version 1.07 - 28 Nov 2003 + +* bug with charset detection via I18N::Langinfo fixed + +* new function Locale::Messages::turn_utf_8_off() + +Version 1.06 - 24 Nov 2003 + +* fixed warning/error under Solaris 8 when I18N::Langinfo is not available + +* simplified sample packaging + +Version 1.05 - 10 Oct 2003 + +* fixed compatibility problems with gettext libraries under Solaris 8 + and higher + +Version 1.04 - 09 Oct 2003 + +* support for language chains in $LANGUAGE (e. g. "fr_BE:fr:de") + +* performance tweaks for Locale::gettext_pp + +* do not clobber $@ in Locale::gettext_pp + +Version 1.03 - 15 Sep 2003 + +* alternative XS implemenation of gettext() and friends (outperforms + pure Perl version by factor 10-15) + +Version 1.02 - 04 Sep 2003 + +* bugfixes for systems that lack both /usr/share/locale and + /usr/local/share/locale + +* compatibility tweaks for Perl 5.005 + +Version 1.01 - 19 Aug 2003 + +* bugfixes + +* compatibility tweaks for MS-DOS diff --git a/Credits b/Credits new file mode 100644 index 0000000..4060159 --- /dev/null +++ b/Credits @@ -0,0 +1,35 @@ +These people have helped in the development of libintl-perl: + +- Joshua Miller has extended libintl-perl to provide + the important context-sensitive functions (pgettext() and friends). + +- Christian Lackas has given various hints on + performance optimizations + +- Ingrid Gräfen has fixed a major performance + penalty on systems without POSIX::LC_MESSAGES, and she has extensively + tested the Perl backend for GNU xgettext under cygwin + +- Bruno Haible for libiconv which was the base for many conversions and + for integrating my Perl backend into GNU gettext + +Other people have helped by sending in improvements, suggestions and +bug reports (you will find out how to make the mail addresses valid): + +- DH +- Jo-Even Skarstein +- Gerhard Stoll +- Marc Brockschmidt +- Laurent Bonnaud +- Jan Kratochvil +- Светослав Агафонкин +- Michael Bell +- David Cantrell +- Karl Berry +- Patrice Dumas +- Karen Etheridge +- Slaven Rezić + +Please inform me if I have forgotten your contribution. + +Guido Flohr diff --git a/FAQ b/FAQ new file mode 100644 index 0000000..81bd0e7 --- /dev/null +++ b/FAQ @@ -0,0 +1,5 @@ +The FAQ has been podified, see "perldoc Locale::libintlFAQ". If you +haven't installed libintl-perl and read this file in the source distribution, +either try "perldoc lib/Locale/libintlFAQ.pod", or point your favorite +web browser to +http://search.cpan.org/~guido/libintl-perl/lib/Locale/libintlFAQ.pod. diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..7dcf1fd --- /dev/null +++ b/MANIFEST @@ -0,0 +1,398 @@ +COPYING GNU General Public License +FAQ Frequently asked questions +MANIFEST This list of files +MANIFEST.SKIP Files to suppress in MANIFEST +Makefile.PL Makefile generator +MyInstall.pm Workaround file +NEWS Latest Changes +Changes Same as NEWS +README See README.md +README-oldversions Where are old versions of this module? +README.md Read it +README.solaris Build libintl-perl on Solaris platforms +README.win32 Build libintl-perl on MS-DOS platforms +REFERENCES Who uses libintl-perl? +THANKS Contributors +Credits Same as THANKS +TODO Missing +gettext_xs/Makefile.PL Makefile generator +gettext_xs/gettext_xs.pm XS loader +gettext_xs/gettext_xs.xs XS binding +lib/Locale/Messages.pm Gettext Like Message Retrieval +lib/Locale/Recode.pm Object−Oriented Portable Charset Conversion +lib/Locale/Recode/_Aliases.pm +lib/Locale/Recode/_Conversions.pm +lib/Locale/RecodeData.pm +lib/Locale/RecodeData/ASMO_449.pm +lib/Locale/RecodeData/ATARI_ST.pm +lib/Locale/RecodeData/ATARI_ST_EURO.pm +lib/Locale/RecodeData/CP10007.pm +lib/Locale/RecodeData/CP1250.pm +lib/Locale/RecodeData/CP1251.pm +lib/Locale/RecodeData/CP1252.pm +lib/Locale/RecodeData/CP1253.pm +lib/Locale/RecodeData/CP1254.pm +lib/Locale/RecodeData/CP1256.pm +lib/Locale/RecodeData/CP1257.pm +lib/Locale/RecodeData/CSN_369103.pm +lib/Locale/RecodeData/CWI.pm +lib/Locale/RecodeData/DEC_MCS.pm +lib/Locale/RecodeData/EBCDIC_AT_DE.pm +lib/Locale/RecodeData/EBCDIC_AT_DE_A.pm +lib/Locale/RecodeData/EBCDIC_CA_FR.pm +lib/Locale/RecodeData/EBCDIC_DK_NO.pm +lib/Locale/RecodeData/EBCDIC_DK_NO_A.pm +lib/Locale/RecodeData/EBCDIC_ES.pm +lib/Locale/RecodeData/EBCDIC_ES_A.pm +lib/Locale/RecodeData/EBCDIC_ES_S.pm +lib/Locale/RecodeData/EBCDIC_FI_SE.pm +lib/Locale/RecodeData/EBCDIC_FI_SE_A.pm +lib/Locale/RecodeData/EBCDIC_FR.pm +lib/Locale/RecodeData/EBCDIC_IS_FRISS.pm +lib/Locale/RecodeData/EBCDIC_IT.pm +lib/Locale/RecodeData/EBCDIC_PT.pm +lib/Locale/RecodeData/EBCDIC_UK.pm +lib/Locale/RecodeData/EBCDIC_US.pm +lib/Locale/RecodeData/ECMA_CYRILLIC.pm +lib/Locale/RecodeData/GEORGIAN_ACADEMY.pm +lib/Locale/RecodeData/GEORGIAN_PS.pm +lib/Locale/RecodeData/GOST_19768_74.pm +lib/Locale/RecodeData/GREEK7.pm +lib/Locale/RecodeData/GREEK7_OLD.pm +lib/Locale/RecodeData/GREEK_CCITT.pm +lib/Locale/RecodeData/HP_ROMAN8.pm +lib/Locale/RecodeData/IBM037.pm +lib/Locale/RecodeData/IBM038.pm +lib/Locale/RecodeData/IBM1004.pm +lib/Locale/RecodeData/IBM1026.pm +lib/Locale/RecodeData/IBM1047.pm +lib/Locale/RecodeData/IBM256.pm +lib/Locale/RecodeData/IBM273.pm +lib/Locale/RecodeData/IBM274.pm +lib/Locale/RecodeData/IBM275.pm +lib/Locale/RecodeData/IBM277.pm +lib/Locale/RecodeData/IBM278.pm +lib/Locale/RecodeData/IBM280.pm +lib/Locale/RecodeData/IBM281.pm +lib/Locale/RecodeData/IBM284.pm +lib/Locale/RecodeData/IBM285.pm +lib/Locale/RecodeData/IBM290.pm +lib/Locale/RecodeData/IBM297.pm +lib/Locale/RecodeData/IBM420.pm +lib/Locale/RecodeData/IBM423.pm +lib/Locale/RecodeData/IBM424.pm +lib/Locale/RecodeData/IBM437.pm +lib/Locale/RecodeData/IBM500.pm +lib/Locale/RecodeData/IBM850.pm +lib/Locale/RecodeData/IBM851.pm +lib/Locale/RecodeData/IBM852.pm +lib/Locale/RecodeData/IBM855.pm +lib/Locale/RecodeData/IBM857.pm +lib/Locale/RecodeData/IBM860.pm +lib/Locale/RecodeData/IBM861.pm +lib/Locale/RecodeData/IBM862.pm +lib/Locale/RecodeData/IBM863.pm +lib/Locale/RecodeData/IBM864.pm +lib/Locale/RecodeData/IBM865.pm +lib/Locale/RecodeData/IBM866.pm +lib/Locale/RecodeData/IBM868.pm +lib/Locale/RecodeData/IBM869.pm +lib/Locale/RecodeData/IBM870.pm +lib/Locale/RecodeData/IBM871.pm +lib/Locale/RecodeData/IBM874.pm +lib/Locale/RecodeData/IBM875.pm +lib/Locale/RecodeData/IBM880.pm +lib/Locale/RecodeData/IBM891.pm +lib/Locale/RecodeData/IBM903.pm +lib/Locale/RecodeData/IBM904.pm +lib/Locale/RecodeData/IBM905.pm +lib/Locale/RecodeData/IBM918.pm +lib/Locale/RecodeData/IEC_P27_1.pm +lib/Locale/RecodeData/INIS.pm +lib/Locale/RecodeData/INIS_8.pm +lib/Locale/RecodeData/INIS_CYRILLIC.pm +lib/Locale/RecodeData/ISO_10367_BOX.pm +lib/Locale/RecodeData/ISO_2033_1983.pm +lib/Locale/RecodeData/ISO_5427.pm +lib/Locale/RecodeData/ISO_5427_EXT.pm +lib/Locale/RecodeData/ISO_5428.pm +lib/Locale/RecodeData/ISO_8859_1.pm +lib/Locale/RecodeData/ISO_8859_10.pm +lib/Locale/RecodeData/ISO_8859_11.pm +lib/Locale/RecodeData/ISO_8859_13.pm +lib/Locale/RecodeData/ISO_8859_14.pm +lib/Locale/RecodeData/ISO_8859_15.pm +lib/Locale/RecodeData/ISO_8859_16.pm +lib/Locale/RecodeData/ISO_8859_2.pm +lib/Locale/RecodeData/ISO_8859_3.pm +lib/Locale/RecodeData/ISO_8859_4.pm +lib/Locale/RecodeData/ISO_8859_5.pm +lib/Locale/RecodeData/ISO_8859_6.pm +lib/Locale/RecodeData/ISO_8859_7.pm +lib/Locale/RecodeData/ISO_8859_8.pm +lib/Locale/RecodeData/ISO_8859_9.pm +lib/Locale/RecodeData/KOI8_R.pm +lib/Locale/RecodeData/KOI8_RU.pm +lib/Locale/RecodeData/KOI8_T.pm +lib/Locale/RecodeData/KOI8_U.pm +lib/Locale/RecodeData/KOI_8.pm +lib/Locale/RecodeData/LATIN_GREEK.pm +lib/Locale/RecodeData/LATIN_GREEK_1.pm +lib/Locale/RecodeData/MACARABIC.pm +lib/Locale/RecodeData/MACCROATIAN.pm +lib/Locale/RecodeData/MACCYRILLIC.pm +lib/Locale/RecodeData/MACGREEK.pm +lib/Locale/RecodeData/MACHEBREW.pm +lib/Locale/RecodeData/MACICELAND.pm +lib/Locale/RecodeData/MACINTOSH.pm +lib/Locale/RecodeData/MACROMANIA.pm +lib/Locale/RecodeData/MACTHAI.pm +lib/Locale/RecodeData/MACTURKISH.pm +lib/Locale/RecodeData/MACUKRAINE.pm +lib/Locale/RecodeData/MAC_IS.pm +lib/Locale/RecodeData/MAC_SAMI.pm +lib/Locale/RecodeData/MAC_UK.pm +lib/Locale/RecodeData/NATS_DANO.pm +lib/Locale/RecodeData/NATS_SEFI.pm +lib/Locale/RecodeData/NEXTSTEP.pm +lib/Locale/RecodeData/SAMI_WS2.pm +lib/Locale/RecodeData/TIS_620.pm +lib/Locale/RecodeData/US_ASCII.pm +lib/Locale/RecodeData/UTF_8.pm +lib/Locale/RecodeData/VISCII.pm +lib/Locale/RecodeData/_Encode.pm +lib/Locale/TextDomain.pm +lib/Locale/Util.pm Attention! Alpha code! +lib/Locale/gettext_dumb.pm +lib/Locale/gettext_pp.pm +lib/Locale/gettext_xs.pod +lib/Locale/libintlFAQ.pod +sample/README +sample/simplecal/.gitignore +sample/simplecal/MANIFEST +sample/simplecal/Makefile.PL +sample/simplecal/README-NLS +sample/simplecal/TRANSLATIONS +sample/simplecal/bin/simplecal.pl +sample/simplecal/lib/SimpleCal.pm +sample/simplecal/po/Makefile +sample/simplecal/po/PACKAGE +sample/simplecal/po/POTFILES +sample/simplecal/po/ar.po +sample/simplecal/po/ar_SA.po +sample/simplecal/po/cs.po +sample/simplecal/po/de.po +sample/simplecal/po/de_AT.po +sample/simplecal/po/fr.po +sample/simplecal/po/ga.po +sample/simplecal/po/it.po +sample/simplecal/po/nl.po +sample/simplecal/po/com.cantanea.simplecal.pot +sample/simplecal/po/pt.po +sample/simplecal/po/pt_BR.po +sample/simplecal/po/ru.po +test.pl +tests/00gettext.t +tests/00recode.t +tests/01trivial.t +tests/02asmo_449.t +tests/02atari-st-euro.t +tests/02atari-st.t +tests/02cp10007.t +tests/02cp1250.t +tests/02cp1251.t +tests/02cp1252.t +tests/02cp1253.t +tests/02cp1254.t +tests/02cp1256.t +tests/02cp1257.t +tests/02csn_369103.t +tests/02cwi.t +tests/02dec-mcs.t +tests/02ebcdic-at-de-a.t +tests/02ebcdic-at-de.t +tests/02ebcdic-ca-fr.t +tests/02ebcdic-dk-no-a.t +tests/02ebcdic-dk-no.t +tests/02ebcdic-es-a.t +tests/02ebcdic-es-s.t +tests/02ebcdic-es.t +tests/02ebcdic-fi-se-a.t +tests/02ebcdic-fi-se.t +tests/02ebcdic-fr.t +tests/02ebcdic-is-friss.t +tests/02ebcdic-it.t +tests/02ebcdic-pt.t +tests/02ebcdic-uk.t +tests/02ebcdic-us.t +tests/02ecma-cyrillic.t +tests/02georgian-academy.t +tests/02georgian-ps.t +tests/02gost_19768-74.t +tests/02greek-ccitt.t +tests/02greek7-old.t +tests/02greek7.t +tests/02hp-roman8.t +tests/02ibm037.t +tests/02ibm038.t +tests/02ibm1004.t +tests/02ibm1026.t +tests/02ibm1047.t +tests/02ibm256.t +tests/02ibm273.t +tests/02ibm274.t +tests/02ibm275.t +tests/02ibm277.t +tests/02ibm278.t +tests/02ibm280.t +tests/02ibm281.t +tests/02ibm284.t +tests/02ibm285.t +tests/02ibm290.t +tests/02ibm297.t +tests/02ibm420.t +tests/02ibm423.t +tests/02ibm424.t +tests/02ibm437.t +tests/02ibm500.t +tests/02ibm850.t +tests/02ibm851.t +tests/02ibm852.t +tests/02ibm855.t +tests/02ibm857.t +tests/02ibm860.t +tests/02ibm861.t +tests/02ibm862.t +tests/02ibm863.t +tests/02ibm864.t +tests/02ibm865.t +tests/02ibm866.t +tests/02ibm868.t +tests/02ibm869.t +tests/02ibm870.t +tests/02ibm871.t +tests/02ibm874.t +tests/02ibm875.t +tests/02ibm880.t +tests/02ibm891.t +tests/02ibm903.t +tests/02ibm904.t +tests/02ibm905.t +tests/02ibm918.t +tests/02iec_p27-1.t +tests/02inis-8.t +tests/02inis-cyrillic.t +tests/02inis.t +tests/02iso-8859-1.t +tests/02iso-8859-10.t +tests/02iso-8859-11.t +tests/02iso-8859-13.t +tests/02iso-8859-14.t +tests/02iso-8859-15.t +tests/02iso-8859-16.t +tests/02iso-8859-2.t +tests/02iso-8859-3.t +tests/02iso-8859-4.t +tests/02iso-8859-5.t +tests/02iso-8859-6.t +tests/02iso-8859-7.t +tests/02iso-8859-8.t +tests/02iso-8859-9.t +tests/02iso_10367-box.t +tests/02iso_2033-1983.t +tests/02iso_5427-ext.t +tests/02iso_5427.t +tests/02iso_5428.t +tests/02koi-8.t +tests/02koi8-r.t +tests/02koi8-ru.t +tests/02koi8-t.t +tests/02koi8-u.t +tests/02latin-greek-1.t +tests/02latin-greek.t +tests/02mac-is.t +tests/02mac-sami.t +tests/02mac-uk.t +tests/02macarabic.t +tests/02maccroatian.t +tests/02maccyrillic.t +tests/02macgreek.t +tests/02machebrew.t +tests/02maciceland.t +tests/02macintosh.t +tests/02macromania.t +tests/02macthai.t +tests/02macturkish.t +tests/02macukraine.t +tests/02nats-dano.t +tests/02nats-sefi.t +tests/02nextstep.t +tests/02sami-ws2.t +tests/02tis-620.t +tests/02us-ascii.t +tests/02utf-8.t +tests/02viscii.t +tests/03_tester_david_pp.t +tests/03_tester_david_xs.t +tests/03bind_textdomain_codeset_pp.t +tests/03bind_textdomain_codeset_xs.t +tests/03bind_textdomain_filter_pp.t +tests/03bind_textdomain_filter_xs.t +tests/03bindtextdomain_pp.t +tests/03bindtextdomain_xs.t +tests/03dcgettext_pp.t +tests/03dcgettext_xs.t +tests/03dcngettext_pp.t +tests/03dcngettext_xs.t +tests/03dcnpgettext_pp.t +tests/03dcnpgettext_xs.t +tests/03dcpgettext_pp.t +tests/03dcpgettext_xs.t +tests/03dgettext_pp.t +tests/03dgettext_xs.t +tests/03dngettext_pp.t +tests/03dngettext_xs.t +tests/03dnpgettext_pp.t +tests/03dnpgettext_xs.t +tests/03dpgettext_pp.t +tests/03dpgettext_xs.t +tests/03environment_pp.t +tests/03environment_xs.t +tests/03gettext_dumb.t +tests/03gettext_pp.t +tests/03gettext_xs.t +tests/03language_pp.t +tests/03language_xs.t +tests/03ngettext_pp.t +tests/03ngettext_xs.t +tests/03npgettext_pp.t +tests/03npgettext_xs.t +tests/03pgettext_pp.t +tests/03pgettext_xs.t +tests/03textdomain_pp.t +tests/03textdomain_xs.t +tests/04find_domain_bug.t +tests/04scalar_noop.t +tests/04russian_plural_function.t +tests/05parse_accept.t +tests/05options.t +tests/LocaleData/de/LC_MESSAGES/additional.mo +tests/LocaleData/de/LC_MESSAGES/existing.mo +tests/LocaleData/de_AT/LC_MESSAGES/additional.mo +tests/LocaleData/xy/LC_MESSAGES/additional.mo +tests/LocaleData/xy/LC_MESSAGES/existing.mo +tests/LocaleData/xy_XY/LC_MESSAGES/additional.mo +tests/LocaleData/xy_XY/LC_MESSAGES/existing.mo +tests/LocaleData/de_AT/LC_MESSAGES/existing.mo +tests/po/Makefile +tests/po/additional.de.po +tests/po/additional.de_AT.po +tests/po/existing.de.po +tests/po/existing.de_AT.po +tests/po/additional.xy.po +tests/po/additional.xy_XY.po +tests/po/existing.xy.po +tests/po/existing.xy_XY.po +SIGNATURE Checksums and signature +META.yml Module YAML meta-data (added by MakeMaker) +META.json Module JSON meta-data (added by MakeMaker) diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP new file mode 100644 index 0000000..161b204 --- /dev/null +++ b/MANIFEST.SKIP @@ -0,0 +1,35 @@ +^\.git +^sample/\.git +~$ +x-.*$ +\bCVS\b +^ChangeLog\.bak$ +^MANIFEST\. +^Makefile$ +^sample/simplecal/Makefile$ +^blib/ +^sample/simplecal/blib/ +^MakeMaker-\d +\.old$ +^#.*#$ +^\.# +\.tar.gz$ +^pm_to_blib$ +^sample/simplecal/pm_to_blib$ +^config.log$ +^xs_disabled$ +^gettext_xs/.git +^gettext_xs/Makefile +^gettext_xs/.*\.(bs|c|o)$ +^gettext_xs/pm_to_blib$ +^build_xs$ +^xs_disabled$ +^config\.log$ +^cover_db$ +^\.includepath$ +^\.project$ +MYMETA\.json$ +MYMETA\.yml$ +.*\.mo$ +.*\.gmo$ +^\.travis\.yml$ diff --git a/META.json b/META.json new file mode 100644 index 0000000..02f086c --- /dev/null +++ b/META.json @@ -0,0 +1,55 @@ +{ + "abstract" : "High-Level Interface to Uniforum Message Translation", + "author" : [ + "Guido Flohr " + ], + "dynamic_config" : 1, + "generated_by" : "ExtUtils::MakeMaker version 7.1002, CPAN::Meta::Converter version 2.150010", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "libintl-perl", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "0" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "0" + } + }, + "runtime" : { + "recommends" : { + "File::ShareDir" : "0" + }, + "requires" : { + "File::Spec" : "0", + "version" : "0.77" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "https://github.com/gflohr/libintl-perl/issues" + }, + "homepage" : "http://www.guido-flohr.net/en/projects/", + "repository" : { + "url" : "https://github.com/gflohr/libintl-perl.git" + } + }, + "version" : "1.29", + "x_serialization_backend" : "JSON::PP version 2.27300_01" +} diff --git a/META.yml b/META.yml new file mode 100644 index 0000000..461a532 --- /dev/null +++ b/META.yml @@ -0,0 +1,30 @@ +--- +abstract: 'High-Level Interface to Uniforum Message Translation' +author: + - 'Guido Flohr ' +build_requires: + ExtUtils::MakeMaker: '0' +configure_requires: + ExtUtils::MakeMaker: '0' +dynamic_config: 1 +generated_by: 'ExtUtils::MakeMaker version 7.1002, CPAN::Meta::Converter version 2.150010' +license: unknown +meta-spec: + url: http://module-build.sourceforge.net/META-spec-v1.4.html + version: '1.4' +name: libintl-perl +no_index: + directory: + - t + - inc +recommends: + File::ShareDir: '0' +requires: + File::Spec: '0' + version: '0.77' +resources: + bugtracker: https://github.com/gflohr/libintl-perl/issues + homepage: http://www.guido-flohr.net/en/projects/ + repository: https://github.com/gflohr/libintl-perl.git +version: '1.29' +x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..2362396 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,276 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 + +# Makefile generator for libintl-perl. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. + +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, +# USA. + +use 5.004; +use ExtUtils::MakeMaker; + +use strict; + +# Make standard channels unbuffered. +select STDERR; $| = 1; +select STDOUT; $| = 1; + +sub ac_try_link; + +use Config; + +# Now try to compile and link a simple test program that uses all +# gettext facilities we need. Failure of the test is not fatal +# since the pure Perl implementation will provide the same functionality. +# However, any help on making this test more portable would be +# highly appreciated! + +unlink "config.log"; + +my $c = <<'EOF'; +/* The following code only compiles if the interface to gettext is + complete. */ + +#include +/* Handle the case that we link against GNU libintl but include a non + * GNU libintl.h. */ +#ifndef __USE_GNU_GETTEXT +# error " is not GNU gettext. Maybe you have to adjust your include path." +#endif + +#include + +int +main (argc, argv) + int argc; + char* argv[]; +{ + /* FIXME: The gettext runtime libraries provided by Solaris 8 and 9 + are not sufficient. Those of Solaris 10 *may* work. To play + safe, we currently only compile the XS version for GNU gettext + and use some undocumented features, to test for that. Thanks + to Bruno Haible for the hint. */ + extern int _nl_msg_cat_cntr; +#if 0 + /* This seems to be defined in the GNU libc only, not in standalone + * GNU gettext. */ + extern int* _nl_domain_bindings; +#endif + + textdomain ("dummy"); + bindtextdomain ("dummy", "."); + bind_textdomain_codeset ("dummy", "us-ascii"); + + gettext ("msgid"); + dgettext ("dummy", "msgid"); + dcgettext ("dummy", "msgid", LC_MESSAGES); + ngettext ("msgid", "msgid_plural", +#if 0 + _nl_msg_cat_cntr + *_nl_domain_bindings); +#else + _nl_msg_cat_cntr); +#endif + dngettext ("dummy", "msgid", "msgid_plural", 1); + dcngettext ("dummy", "msgid", "msgid_plural", 1, LC_MESSAGES); + + return 0; +} +EOF + +my $build_gettext_xs = ac_try_link $c, "Checking whether we can compile the XS version"; +unless ($build_gettext_xs) { + $build_gettext_xs = ac_try_link $c, " Trying again with -lintl", "-lintl"; +} +unless ($build_gettext_xs) { + $build_gettext_xs = ac_try_link $c, " Trying again with -lintl -liconv", "-lintl", "-liconv"; +} +unless ($build_gettext_xs) { + $build_gettext_xs = ac_try_link $c, " Trying again with -liconv", "-liconv"; +} + +unless ($build_gettext_xs) { + print STDERR < Cannot build the XS version of libintl-perl (see 'config.log' for +=> details). This is harmless! +EOF +} else { + print STDERR < Building the XS version of libintl-perl. +EOF +} + +sub ac_try_link { + my ($c_code, $msg, @options) = @_; + + print STDERR "$msg ... "; + local *HANDLE; + open HANDLE, ">gettest.c" or die "cannot create file 'gettest.c': $!\n"; + print HANDLE $c_code; + close HANDLE or die "cannot close file 'gettest.c': $!\n"; + + my @cmd = $Config{cc}; + push @cmd, $Config{ccflags}; + push @cmd, $Config{ldflags}; + push @cmd, $Config{perllibs}; + push @cmd, @options; + push @cmd, "-o", "gettest.exe", "gettest.c"; + + # Temporarily redirect stdout and stderr. + open OLDOUT, ">&STDOUT" or die "cannot dup STDOUT: $!"; + open OLDERR, ">&STDERR" or die "cannot dup STDERR: $!"; + open STDOUT, ">>config.log" or die "cannot redirect STDOUT: $!"; + open STDERR, ">&STDOUT" or die "cannot dup STDOUT: $!"; + select STDERR; $| = 1; + select STDOUT; $| = 1; + + my $cmd = join ' ', @cmd; + print <gettext.c <&OLDOUT" or die "cannot dup \$oldout: $!"; + open STDERR, ">&OLDERR" or die "cannot dup OLDERR: $!"; + close OLDOUT; close OLDERR; # Shut up warnings. + + unlink "gettest.c", "gettest.exe"; + + print STDERR $result ? "no.\n" : "yes.\n"; + + return !$result; +} + +package MY; + +# FIXME: This is really a hack! Problem: Depending on the build system, +# we may or may not build and install the XS version. If the XS version +# is being built, the directory blib/arch will be populated, if it is +# not being built, blib/arch will be empty. Unfortunately, if blib/arch +# is not empty, *all* library files will be installed in the architecture +# dependent locations, if it is empty, they will be installed in the +# architecture independent tree. +# +# Unfortunately, ExtUtils::MakeMaker does not take care of uninstalling +# files from previous installations. Consequently, we cannot determine +# which version of the library will be loaded, since this depends on the +# current value of @INC. +# +# The solution does not really make me happy. The Makefile will be patched, +# so that instead of ExtUtils::Install a custom module MyInstall.pm will +# be used. This custom module overwrites the subroutine that detects +# whether a directory is empty in ExtUtils::Install, and will lie if that +# directory happens to be "blib/arch". This little hack effectively disables +# the annoying behavior of ExtUtils::Install (and I sincerely hope that +# this is portable). +sub libscan +{ + my ($self, $file) = @_; + + return if 'MyInstall.pm' eq $file; + + $self->SUPER::libscan ($file); +} + +sub tools_other +{ + my $self = shift; + + my $fragment = $self->SUPER::tools_other (@_); + + $fragment =~ s/^MOD_INSTALL\s*=\s*(.*?)-MExtUtils::Install + /MOD_INSTALL =$1-I. -MMyInstall/msx; + + return $fragment; +} + +package main; + +my $name = $0; +$name =~ s,Makefile\.PL$,xs_disabled,; +local *HANDLE; +open HANDLE, ">$name" or die "cannot open '$name' for writing: $!"; +print HANDLE !$build_gettext_xs; +close HANDLE or die "cannot close '$name': $!"; + +WriteMakefile ( + NAME => 'libintl-perl', + VERSION_FROM => 'lib/Locale/Messages.pm', + ($] >= 5.005 ? + (ABSTRACT => 'High-Level Interface to Uniforum Message' + . ' Translation', + AUTHOR => 'Guido Flohr ', + ) : (), + ), + PREREQ_PM => { 'File::Spec' => 0, version => 0.77 }, + META_MERGE => { + recommends => { 'File::ShareDir' => 0 }, + resources => { + homepage => 'http://www.guido-flohr.net/en/projects/', + bugtracker => 'https://github.com/gflohr/libintl-perl/issues', + repository => 'https://github.com/gflohr/libintl-perl.git', + }, + }, + PL_FILES => {}, + DIR => [$build_gettext_xs ? ('gettext_xs') : ()], + clean => { FILES => 'xs_disabled build_xs' }, + (MM->can ('signature_target') ? (SIGN => 1) : ()), + # If you want to build the XS version although the automatic detection + # suggests not to build it, uncomment the following line. + #DIR => [ ('gettext_xs') ], +); + +sub MY::postamble { + # This is for developers only. + return '' if ! -e '.git'; + + ' +all :: Credits Changes README + +# Make search.cpan.org happy but still follow GNU standards: +# # (Thanks to Graham Barr for the hint) +Credits: THANKS + cat THANKS >$@ + +Changes: NEWS + cat NEWS >$@ + +README: README.md + cat README.md >$@ +' +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/MyInstall.pm b/MyInstall.pm new file mode 100644 index 0000000..2dd8814 --- /dev/null +++ b/MyInstall.pm @@ -0,0 +1,43 @@ +package MyInstall; + +use ExtUtils::Install; +use File::Find; + +use vars qw (@ISA @EXPORT @EXPORT_OK); + +@ISA = @ExtUtils::Install::ISA; +@EXPORT = @ExtUtils::Install::EXPORT; +@EXPORT_OK = @ExtUtils::Install::EXPORT_OK; + +sub ExtUtils::Install::directory_not_empty ($) { + my($dir) = @_; + + return 0 if $dir eq 'blib/arch'; + + my $files = 0; + find(sub { + return if $_ eq ".exists"; + if (-f) { + $File::Find::prune++; + $files = 1; + } + }, $dir); + return $files; +} + +sub AUTOLOAD +{ + print STDERR "AUTOLOAD: $AUTOLOAD\n"; + + my $name = 'func'; + my $code; + my $string = "\$code = \\&ExtUtils::Install::$name"; + + eval $string; + *$AUTOLOAD = $code; + + goto &$AUTOLOAD; +} + +1; + diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..66e74c4 --- /dev/null +++ b/NEWS @@ -0,0 +1,225 @@ +Version 1.29 - 09 Aug 2017 + +* Important: Fixed a bug that caused Locale::gettext_pp and + Locale::gettext_dumb to not load .mo files with a revision + number of 0.1 not to be loaded + (see https://github.com/gflohr/libintl-perl/issues/1) +* New bug tracker address is https://github.com/gflohr/libintl-perl/issues + +Version 1.28 - 31 Aug 2017 + +* New class methods options(), keywords(), and flags() for + Locale::TextDomain + +Version 1.27 - 7 Aug 2017 + +* Bugs fixed: + + https://rt.cpan.org/Public/Bug/Display.html?id=114731 + https://rt.cpan.org/Public/Bug/Display.html?id=116772 + https://rt.cpan.org/Public/Bug/Display.html?id=119014 + https://rt.cpan.org/Public/Bug/Display.html?id=120165 + https://rt.cpan.org/Public/Bug/Display.html?id=120446 + +Version 1.26 - 13 May 2016 + +* Fixed more false negatives in tests, no need to upgrade. + +* Bugs fixed: + + https://rt.cpan.org/Ticket/Display.html?id=115052 + +Version 1.25 - 09 May 2016 + +* Fixed false negatives in test suite, no need to upgrade the module! + +* Bugs fixed: + + https://rt.cpan.org/Ticket/Display.html?id=83980 + https://rt.cpan.org/Ticket/Display.html?id=47968 + +Version 1.24 - 08 Apr 2016 + +* Better portability for tests. + +* Updated documentation. + +* License changed to GPLv3. + +* Bugs fixed: + + https://rt.cpan.org/Ticket/Display.html?id=98109 + https://rt.cpan.org/Ticket/Display.html?id=47968 + https://rt.cpan.org/Ticket/Display.html?id=83980 + https://rt.cpan.org/Ticket/Display.html?id=102288 + +Version 1.23 - 24 Jan 2013 + +* New message retrieval backend Locale::gettext_dumb(3pm) which produces + translations even, when the corresponding locale is not present in + the system. + +* Fixed a bug where the Perl backend under certain circumstances clobbered + the environment variable LC_ALL. + +* Avoid test failures by skipping all tests that depend on the de_AT + locale, when that locale is not installed. + +* Bugs fixed: + https://rt.cpan.org/Ticket/Display.html?id=82856 + +Version 1.22 - 24 Jan 2013 + +* Version 1.22 outsmarted PAUSE (the CPAN upload facility) and had to + be removed. + +Version 1.21 - 15 Jan 2013 + +* Environment variables LANGUAGE and LANG are interpreted in the same way + in the XS and the pure Perl version. + +* Package design closer to GNU standards. + +* If present, File::ShareDir is used for searching message catalogs. + +* Cleaned up distribution. + +* Bugs fixed: + https://rt.cpan.org/Ticket/Display.html?id=78341 + https://rt.cpan.org/Ticket/Display.html?id=81315 + https://rt.cpan.org/Ticket/Display.html?id=79461 + https://rt.cpan.org/Ticket/Display.html?id=71509 + https://rt.cpan.org/Ticket/Display.html?id=49744 + https://rt.cpan.org/Ticket/Display.html?id=49744 + https://rt.cpan.org/Ticket/Display.html?id=64284 + +Version 1.20 - 29 Jue 2009 + +* Test suite revamped. Failures are now explained better, and it should + be easier to debug them remotely. + +* Bugs fixed: + https://rt.cpan.org/Ticket/Display.html?id=49744 + +Version 1.19 - 19 Jun 2009 + +* New context functions now work with Perl 5.6.2. + +* N__() now mirrors its argument in scalar context for convenience. + +Version 1.18 - 26 May 2009 + +* Cosmetic change: The version number is now both in Locale::Messages + and in Locale::TextDomain to work around a shortcoming of the + PAUSE indexer. + +Version 1.17 - 25 May 2009 + +* New context support, supporting .po files with msgctxt, and + appropriate supporting calls (*pgettext calls) under both + gettext_pp and gettext_xs. TextDomain.pm received corresponding + calls: __p __px __np __npx __xnp. + +* New module Locale::Util with some utility functions, especially for + web development. Attention, this is still alpha code! + +* Try to warn about wrong usage of the tied hashes in + Locale::TextDomain. + +* Minor bugfixes + +Version 1.16 - 28 Sep 2005 + +* New function Locale::Messages::bind_textdomain_filter() allows you + to register an output filter as a callback. You can use this + feature for example to set the utf-8 flag on translated string when + you are sure that the output is actually utf-8. + +* New function Locale::Messages::turn_utf_8_on(). + +* various minor bug fixes. + +Version 1.15 - 1 Sep 2005 + +* Workarounds and bugfixes for misconfigured Solaris systems + +* Fixed the completely broken simplecal example + +* Added section about non-ascii msgids to the POD of Locale::Messages + +Version 1.14 - 11 Aug 2005 + +* Oops: forgot to update the version check in Locale::Messages + +* The XS version builds easier on *BSD systems now + +Version 1.12 - 11 Aug 2005 + +* Minor bugfixes + +* The test scripts now check whether the needed locales are installed + +Version 1.11 - 11 Jun 2004 + +* Version 1.11 is a minor bugfix release + +Version 1.10 - 12 Jan 2004 + +* XS version now compiles under Windows (GNU gettext and libiconv required, + build with "perl Makefile.PL DIR=gettext_xs", see README.win32 for details) + +Version 1.09 - 29 Dec 2003 + +* check version match with XS module + +* in pure Perl version, use user supplied locale name when guessing + the output character set + +* corrections for Atari character maps + +Version 1.08 - 30 Nov 2003 + +* fixed bug #4512 on https://rt.cpan.org/ (reported by unknown guest) + +Version 1.07 - 28 Nov 2003 + +* bug with charset detection via I18N::Langinfo fixed + +* new function Locale::Messages::turn_utf_8_off() + +Version 1.06 - 24 Nov 2003 + +* fixed warning/error under Solaris 8 when I18N::Langinfo is not available + +* simplified sample packaging + +Version 1.05 - 10 Oct 2003 + +* fixed compatibility problems with gettext libraries under Solaris 8 + and higher + +Version 1.04 - 09 Oct 2003 + +* support for language chains in $LANGUAGE (e. g. "fr_BE:fr:de") + +* performance tweaks for Locale::gettext_pp + +* do not clobber $@ in Locale::gettext_pp + +Version 1.03 - 15 Sep 2003 + +* alternative XS implemenation of gettext() and friends (outperforms + pure Perl version by factor 10-15) + +Version 1.02 - 04 Sep 2003 + +* bugfixes for systems that lack both /usr/share/locale and + /usr/local/share/locale + +* compatibility tweaks for Perl 5.005 + +Version 1.01 - 19 Aug 2003 + +* bugfixes + +* compatibility tweaks for MS-DOS diff --git a/README b/README new file mode 100644 index 0000000..1fe1708 --- /dev/null +++ b/README @@ -0,0 +1,249 @@ +README for libintl-perl +======================= + +The package libintl-perl is an internationalization library for Perl +that aims to be compatible with the Uniforum message translations +system as implemented for example in GNU gettext. + +See the file COPYING and the source code for licensing. + +Requirements +------------ + +The library is entirely written in Perl. It should run on every +system with a Perl5 interpreter. The minimum required Perl version +should be 5.004. + +The behavior of the package varies a little depending on the Perl +version: + +- Perl 5.8 or better + +Recommended. Perl 5.8 offers maximum performance and support for +various multi-byte encodings (even more if Encode::Han is installed). +Additionally the output charset is chosen automatically according to +the information provided by I18N::Langinfo. In fact, I18N::Langinfo +is already available for Perl 5.7 but this developer version is +probably not much in use any more. + +- Perl 5.6 or better + +Still offers high-performance UTF-8 handling but no support for other +multi-byte encodings unless the package Encode is installed. + +- Earlier Perl versions + +Full UTF-8 support but quiet slow since all conversion routines are +written in Perl. More exactly: Encoding from 8 bit charsets into +UTF-8 is reasonably fast and usable. Decoding UTF-8 is slow, however. + +Note that these are actually the requirements for the *users* of your +software internationalized with libintl-perl. + +As a maintainer of a Perl package that uses libintl-perl, you will +also need a recent version of GNU gettext (see the file README in the +subdirectory "sample/" of the source distribution of libintl-perl). +Translators of your software can basically do their job with any text +editor, but it usually makes sense for them, too, to have GNU gettext +installed. End users of your software, or people that install an +internationalized Perl package do *not* need it, unless they want to +add a new language to your software. + +Installation +------------ + +If libintl-perl is not installed on your system, you have to build it +from the sources, which is a lot easier than you may think. You need +the program "make" for that and a command line shell. No C compiler is +required. + +Unpack the package in a directory of your choice, cd into that +directory and then type + + perl Makefile.PL + make + +This will build the package. You can then run the tests with + + make test + +To install the package, type + + make install + +You will probably need root permissions to do that. + +Of course, you can also use the CPAN module to install the package. + +Feedback +-------- + +Send negative (and positive!) feedback to me. Bug reports can be send +directly to me or you can use the +[RT bugtracking system](http://rt.cpan.org/ "Link to RT"). + +If you use libintl-perl for your project, private or public, free or +commercial, please let me know. I am interested in such information. + +If you really like (or dislike?) libintl-perl, tell the world about. +You can star it on [github](http://github.com/gflohr/libintl-perl). You +can rate it and even write a review at +[cpanratings](http://cpanratings.perl.org/) +(search for "libintl-perl"). + +Design Goals +------------ + +The primary design goal of libintl-perl is maximum compatibility with +the gettext functions available for other programming languages. It +is intended that programmers, translators, and end users can fully +benefit from all existing i18n tools like xgettext for message +extraction, msgfmt, msgmerge, etc. for catalog manipulation, Emacs PO +mode (or KBabel, PO-Edit, ...) for catalog editing and so on. + +Another design goal is maximum portability. The library should be +functional without any additional software but with a wide range of +Perl versions. Wherever possible, hooks have been inserted to benefit +from advanced features in the runtime environment, but the basic +functionality should be present everywhere. + +Overview +-------- + +The core of the library is the module Locale::gettext_pp. It is a +pure Perl re-implementation of the module Locale::gettext available on +CPAN. However, the XS version Locale::gettext lacks some functions +(notably plural handling and output conversion) that are already +present in Locale::gettext_pp. Locale::gettext_pp provides the +internationalization functions that are available in your system +library (libc) or additional C libraries (for example libintl in the +case of GNU gettext). + +The class Locale::Messages is an additional abstraction layer that is +prepared for dynamic switching between different gettext implementations (for +example Locale::gettext_pp and Locale::gettext). It provides +basically the same interface as Locale::gettext_pp but in an +implementation-independent manner. + +The module Locale::TextDomain is the only module that you should +actually use in your software. It represents the message translation +system for a particular text domain (a text domain is a unique +identifier for your software package), makes use of Locale::Messages +for message translation and catalog location, and it provides +additional utility functions, for example common shortcut names for +i18n routines, tied hashes for hash-like lookups into the translation +database, and finally an interpolation mechanism suitable for +internationalized messages. + +The package also contains a charset conversion library +Locale::Recode. This library is used internally by Locale::gettext_pp +to allow on-the-fly charset conversion between the charset in a +message catalog and the preferred (end) user charset. Its main +advantage about the Encode package available for recent Perl versions +is its portability, since it does not require the Unicode capabilities +of Perl that were introduced with Perl 5.6. It fully supports UTF-8 +with every Perl version and a wealth of common 8 bit encodings. If +you have to do charset conversion with older Perl versions, then +Locale::Recode may be worth a try although it is really only a helper +library, not intended as a competitor to Encode. + +Documentation +------------- + +For a basic understanding of message translation in Perl with +libintl-perl you should read the perldoc of Locale::TextDomain. Don't +bother about the documentation of the other modules in the library, +you will not need it unless you want to hack the library yourself. + +In order to make use of the software, you will also need various tools +from GNU gettext [savannah](http://savannah.gnu.org/projects/gettext/). The documentation is located at [www.gnu.org](http://www.gnu.org/manual/gettext/). +You will find there a language-independent overview of +internationalization with GNU gettext, and in the Perl-specific +sections you will find details about the parser that extracts +translatable messages from your Perl sources. + +Quick-Start +----------- + +The subdirectory "sample" of the source distribution of libintl-perl +contains a full-fledged example for an internationalized Perl package, +including a working Makefile. The README of that subdirectory +explains all necessary steps. + +However, if you are on a recent GNU/Linux system or similar (cygwin +should also do), chances are that you can get the following example to +run: + + #! /usr/local/bin/perl -w + + use strict; + + # This assumes that the textdomain 'libc' is available on your + # system. Try "locate libc.mo" or "locate libc.gmo" (or + # "find / -type f -name libc.mo" if locate is not available on + # your system). + # + # By the way, the "use Locale::TextDomain (TEXTDOMAIN) is the + # equivalent of + # + # textdomain ("TEXTDOMAIN"); + # + # in C or similar languages. + use Locale::TextDomain ('libc'); + + # The locale category LC_MESSAGES is not exported by the POSIX + # module on older Perl versions. + use Locale::Messages qw (LC_MESSAGES); + + use POSIX ('setlocale'); + + # Set the locale according to our environment. + setlocale (LC_MESSAGES, ''); + + # This makes the assumption that your system libc defines a + # message "No such file or directory". Check the exact + # spelling on your system with something like + # "ls NON-EXISTANT". + # Note the double underscore in front of the string. This is + # really a function call to the function __() that is + # automagically imported by Locale::TextDomain into your + # namespace. This function takes its argument, looks up a + # translation for it, and returns that, or the unmodified + # string in case of failure. + print __"No such file or directory", ".\n"; + + __END__ + +Now run the command "locale -a" or "nlsinfo" to get a list of +available locales on your system. Try the section "Finding locales" +in "perldoc perllocale" if you have problems. + +If, for example, the locale "fr_FR" is available on your system, set +the environment variable LANG to that value, for a POSIX shell + + LANG=fr_FR + export LANG + +for the C shell + + setenv LANG fr_FR + +and run your little Perl script. It should tell you what the error +message for "No such file or directory" is in French, or whatever +language you chose. Not a real example, because we have "stolen" a +message from a system catalog. But it should give you the general +idea, especially if you are already familiar with gettext in C. + +If you still see the English message, this does not necessarily mean a +failure, since the string is maybe not translated on your system (try +"locate libc.mo" to get a list of available translations). Even for +the translations listed there, that particular message might be +missing. Try a common locale like "de_DE" or "fr_FR" that are usually +fully translated then. + +Your next steps should be "perldoc Locale::TextDomain", and then study +the example in the subdirectory "sample" of this distribution. + +Have fun with libintl-perl! + +Guido Flohr diff --git a/README-oldversions b/README-oldversions new file mode 100644 index 0000000..ddfbff2 --- /dev/null +++ b/README-oldversions @@ -0,0 +1,10 @@ +Hi, + +old versions of my modules can be found here: + + http://history.perl.org/backpan/authors/id/G/GU/GUIDO/ + +This is an effort to keep CPAN and its mirrors clean. + +Regards, +Guido diff --git a/README.md b/README.md new file mode 100644 index 0000000..1fe1708 --- /dev/null +++ b/README.md @@ -0,0 +1,249 @@ +README for libintl-perl +======================= + +The package libintl-perl is an internationalization library for Perl +that aims to be compatible with the Uniforum message translations +system as implemented for example in GNU gettext. + +See the file COPYING and the source code for licensing. + +Requirements +------------ + +The library is entirely written in Perl. It should run on every +system with a Perl5 interpreter. The minimum required Perl version +should be 5.004. + +The behavior of the package varies a little depending on the Perl +version: + +- Perl 5.8 or better + +Recommended. Perl 5.8 offers maximum performance and support for +various multi-byte encodings (even more if Encode::Han is installed). +Additionally the output charset is chosen automatically according to +the information provided by I18N::Langinfo. In fact, I18N::Langinfo +is already available for Perl 5.7 but this developer version is +probably not much in use any more. + +- Perl 5.6 or better + +Still offers high-performance UTF-8 handling but no support for other +multi-byte encodings unless the package Encode is installed. + +- Earlier Perl versions + +Full UTF-8 support but quiet slow since all conversion routines are +written in Perl. More exactly: Encoding from 8 bit charsets into +UTF-8 is reasonably fast and usable. Decoding UTF-8 is slow, however. + +Note that these are actually the requirements for the *users* of your +software internationalized with libintl-perl. + +As a maintainer of a Perl package that uses libintl-perl, you will +also need a recent version of GNU gettext (see the file README in the +subdirectory "sample/" of the source distribution of libintl-perl). +Translators of your software can basically do their job with any text +editor, but it usually makes sense for them, too, to have GNU gettext +installed. End users of your software, or people that install an +internationalized Perl package do *not* need it, unless they want to +add a new language to your software. + +Installation +------------ + +If libintl-perl is not installed on your system, you have to build it +from the sources, which is a lot easier than you may think. You need +the program "make" for that and a command line shell. No C compiler is +required. + +Unpack the package in a directory of your choice, cd into that +directory and then type + + perl Makefile.PL + make + +This will build the package. You can then run the tests with + + make test + +To install the package, type + + make install + +You will probably need root permissions to do that. + +Of course, you can also use the CPAN module to install the package. + +Feedback +-------- + +Send negative (and positive!) feedback to me. Bug reports can be send +directly to me or you can use the +[RT bugtracking system](http://rt.cpan.org/ "Link to RT"). + +If you use libintl-perl for your project, private or public, free or +commercial, please let me know. I am interested in such information. + +If you really like (or dislike?) libintl-perl, tell the world about. +You can star it on [github](http://github.com/gflohr/libintl-perl). You +can rate it and even write a review at +[cpanratings](http://cpanratings.perl.org/) +(search for "libintl-perl"). + +Design Goals +------------ + +The primary design goal of libintl-perl is maximum compatibility with +the gettext functions available for other programming languages. It +is intended that programmers, translators, and end users can fully +benefit from all existing i18n tools like xgettext for message +extraction, msgfmt, msgmerge, etc. for catalog manipulation, Emacs PO +mode (or KBabel, PO-Edit, ...) for catalog editing and so on. + +Another design goal is maximum portability. The library should be +functional without any additional software but with a wide range of +Perl versions. Wherever possible, hooks have been inserted to benefit +from advanced features in the runtime environment, but the basic +functionality should be present everywhere. + +Overview +-------- + +The core of the library is the module Locale::gettext_pp. It is a +pure Perl re-implementation of the module Locale::gettext available on +CPAN. However, the XS version Locale::gettext lacks some functions +(notably plural handling and output conversion) that are already +present in Locale::gettext_pp. Locale::gettext_pp provides the +internationalization functions that are available in your system +library (libc) or additional C libraries (for example libintl in the +case of GNU gettext). + +The class Locale::Messages is an additional abstraction layer that is +prepared for dynamic switching between different gettext implementations (for +example Locale::gettext_pp and Locale::gettext). It provides +basically the same interface as Locale::gettext_pp but in an +implementation-independent manner. + +The module Locale::TextDomain is the only module that you should +actually use in your software. It represents the message translation +system for a particular text domain (a text domain is a unique +identifier for your software package), makes use of Locale::Messages +for message translation and catalog location, and it provides +additional utility functions, for example common shortcut names for +i18n routines, tied hashes for hash-like lookups into the translation +database, and finally an interpolation mechanism suitable for +internationalized messages. + +The package also contains a charset conversion library +Locale::Recode. This library is used internally by Locale::gettext_pp +to allow on-the-fly charset conversion between the charset in a +message catalog and the preferred (end) user charset. Its main +advantage about the Encode package available for recent Perl versions +is its portability, since it does not require the Unicode capabilities +of Perl that were introduced with Perl 5.6. It fully supports UTF-8 +with every Perl version and a wealth of common 8 bit encodings. If +you have to do charset conversion with older Perl versions, then +Locale::Recode may be worth a try although it is really only a helper +library, not intended as a competitor to Encode. + +Documentation +------------- + +For a basic understanding of message translation in Perl with +libintl-perl you should read the perldoc of Locale::TextDomain. Don't +bother about the documentation of the other modules in the library, +you will not need it unless you want to hack the library yourself. + +In order to make use of the software, you will also need various tools +from GNU gettext [savannah](http://savannah.gnu.org/projects/gettext/). The documentation is located at [www.gnu.org](http://www.gnu.org/manual/gettext/). +You will find there a language-independent overview of +internationalization with GNU gettext, and in the Perl-specific +sections you will find details about the parser that extracts +translatable messages from your Perl sources. + +Quick-Start +----------- + +The subdirectory "sample" of the source distribution of libintl-perl +contains a full-fledged example for an internationalized Perl package, +including a working Makefile. The README of that subdirectory +explains all necessary steps. + +However, if you are on a recent GNU/Linux system or similar (cygwin +should also do), chances are that you can get the following example to +run: + + #! /usr/local/bin/perl -w + + use strict; + + # This assumes that the textdomain 'libc' is available on your + # system. Try "locate libc.mo" or "locate libc.gmo" (or + # "find / -type f -name libc.mo" if locate is not available on + # your system). + # + # By the way, the "use Locale::TextDomain (TEXTDOMAIN) is the + # equivalent of + # + # textdomain ("TEXTDOMAIN"); + # + # in C or similar languages. + use Locale::TextDomain ('libc'); + + # The locale category LC_MESSAGES is not exported by the POSIX + # module on older Perl versions. + use Locale::Messages qw (LC_MESSAGES); + + use POSIX ('setlocale'); + + # Set the locale according to our environment. + setlocale (LC_MESSAGES, ''); + + # This makes the assumption that your system libc defines a + # message "No such file or directory". Check the exact + # spelling on your system with something like + # "ls NON-EXISTANT". + # Note the double underscore in front of the string. This is + # really a function call to the function __() that is + # automagically imported by Locale::TextDomain into your + # namespace. This function takes its argument, looks up a + # translation for it, and returns that, or the unmodified + # string in case of failure. + print __"No such file or directory", ".\n"; + + __END__ + +Now run the command "locale -a" or "nlsinfo" to get a list of +available locales on your system. Try the section "Finding locales" +in "perldoc perllocale" if you have problems. + +If, for example, the locale "fr_FR" is available on your system, set +the environment variable LANG to that value, for a POSIX shell + + LANG=fr_FR + export LANG + +for the C shell + + setenv LANG fr_FR + +and run your little Perl script. It should tell you what the error +message for "No such file or directory" is in French, or whatever +language you chose. Not a real example, because we have "stolen" a +message from a system catalog. But it should give you the general +idea, especially if you are already familiar with gettext in C. + +If you still see the English message, this does not necessarily mean a +failure, since the string is maybe not translated on your system (try +"locate libc.mo" to get a list of available translations). Even for +the translations listed there, that particular message might be +missing. Try a common locale like "de_DE" or "fr_FR" that are usually +fully translated then. + +Your next steps should be "perldoc Locale::TextDomain", and then study +the example in the subdirectory "sample" of this distribution. + +Have fun with libintl-perl! + +Guido Flohr diff --git a/README.solaris b/README.solaris new file mode 100644 index 0000000..c5d390a --- /dev/null +++ b/README.solaris @@ -0,0 +1,125 @@ +Special Notes for Sun Solaris +============================= + +Recent versions of Solaris ship with a libintl that is mostly compatible +with GNU gettext. Even the plural handling functions (ngettext, +dngettext, dcngettext, ...) and output character conversion functions +(bind_textdomain_codeset) are included. + +On my test system, the behavior of the Solaris version differs in one +important point from the pure Perl version or the GNU gettext version: +In a locale environment that is a regional variant of another locale +(for example "fr_CA" is a regional variant of "fr"), both the pure Perl +version from libintl-perl and the C version from GNU gettext will fall +back to translations for the superordinate message catalog ("fr") if +no special translation for the selected locale ("fr_CA") can be found. +This fallback mechanism is missing in the Solaris implementation. + +This could be considered harmless, because Solaris users are probably +used to this behavior. On the other hand, the pure Perl version of +gettext in libintl-perl aims to be as compatible as possible to the +GNU gettext implementation. Furthermore, if the pure Perl and the +C/XS version behave differently, users may be unnecessarily confused. + +If you think you can live with that little inconsistence, you are not +completely lost: Edit the toplevel Makefile.PL, in the function +WriteMakefile(), change the value for the hash slot "DIR" from +the value depending on "$result" to simply "['gettext_xs']". If you +have a look at the source code of Makefile.PL, you will see that this +has already been prepared. + +If you do this, the test suite will fail, because the above described +behavior ("fr_CA" vs. "fr" ...) is checked by the tests. In this case, +expect the following failures: + +Failed Test Stat Wstat Total Fail Failed List of Failed +------------------------------------------------------------------------------- +./tests/03bind_textdomain_codeset_xs.t 9 2 22.22% 5 9 +./tests/03dcgettext_xs.t 9 2 22.22% 3 7 +./tests/03dcngettext_xs.t 83 51 61.45% 22-31 43-83 +./tests/03dgettext_xs.t 9 2 22.22% 3 7 +./tests/03dngettext_xs.t 83 51 61.45% 22-31 43-83 +./tests/03gettext_xs.t 6 1 16.67% 3 +./tests/03ngettext_xs.t 85 51 60.00% 23-32 45-85 + +But even if you have installed GNU gettext, you may run into this error +when trying to compile the XS version: + +"gettext_xs.xs", line 32: #error: " is not GNU gettext. Maybe you have to adjust your include path." +cc: acomp failed for gettext_xs.c +make[1]: *** [gettext_xs.o] Error 2 +make[1]: Leaving directory `/root/libintl-perl-1.15/gettext_xs' +make: *** [subdirs] Error 2 + +What has happened here? Have a look at the source code of +that ships with GNU gettext: + +/* We define an additional symbol to signal that we use the GNU + implementation of gettext. */ +#define __USE_GNU_GETTEXT 1 + +... + +/* We redirect the functions to those prefixed with "libintl_". This is + necessary, because some systems define gettext/textdomain/... in the C + library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer). + If we used the unprefixed names, there would be cases where the + definition in the C library would override the one in the libintl.so + shared library. Recall that on ELF systems, the symbols are looked + up in the following order: + 1. in the executable, + 2. in the shared libraries specified on the link command line, in order, + 3. in the dependencies of the shared libraries specified on the link + command line, + 4. in the dlopen()ed shared libraries, in the order in which they were + dlopen()ed. + The definition in the C library would override the one in libintl.so if + either + * -lc is given on the link command line and -lintl isn't, or + * -lc is given on the link command line before -lintl, or + * libintl.so is a dependency of a dlopen()ed shared library but not + linked to the executable at link time. + Since Solaris gettext() behaves differently than GNU gettext(), this + would be unacceptable. + + The redirection happens by default through macros in C, so that &gettext + is independent of the compilation unit, but through inline functions in + C++, in order not to interfere with the name mangling of class fields or + class methods called 'gettext'. */ + +In brief: The GNU libraries libintl.so and libintl.a prefix all functions +with "libintl_" in order to avoid symbol name conflicts with the vanilla +Solaris verssion. These precautions still give room to a popular +misconfiguration: If you install GNU gettext with the default prefix +"/usr/local", libraries will get installed in "/usr/local/lib", the +header files - notably - will get installed in +"/usr/local/include", so far so good. Now set the environment variable +LD_LIBRARY_PATH to "/usr/local/lib", so that the GNU version of libintl.so +will be found by the dynamic loader at runtime. Yet, if +"/usr/local/include" comes after "/usr/include" in your C compiler's +include path, the above described trick does not work, the functions +like "gettext", "dgettext" etc. will not get re-defined to "libintl_gettext", +"libintl_dgettext" and so on. Remember, the preprocessor trick used by +GNU gettext will change every reference to the function gettext() into +a reference to libintl_gettext() for gettext() into a definition for +libintl_gettext(). If your C compiler includes the "wrong" include file +(/usr/include/libintl.h) instead of the "correct" one +(/usr/local/include/libintl.h), your C sources will still reference +gettext() instead of libintl_gettext(). At run-time, even if the dynamic +loader considers the GNU version of libintl.so (in "/usr/local/lib"), it +will not use it, because it looks for the "wrong" symbol gettext() +instead of libintl_gettext(). + +Too complicated? Okay: The order for C header files for the C compiler +(actually the preprocessor) differs from the inclusion order for +libraries and this must lead to trouble. If you understand WHY, you +will find a way to fix it. If not, ignore the problem: Do not +build the problem, and be assured, that the pure Perl version is +fast enough. It is very, very unlikely that using the pure Perl +instead of the XS version of will be the bottleneck of any application +you use. + +Life is complicated under the sun, ain't it? ;-) + +Guido + diff --git a/README.win32 b/README.win32 new file mode 100755 index 0000000..031759d --- /dev/null +++ b/README.win32 @@ -0,0 +1,110 @@ +When building libintl-perl under 32 bit versions of MS-DOS, you have several +options, depending on the facilities available on your system, and on the Perl +version you use. + +Cygwin Perl +=========== + +When using the Perl interpreter that ships with cygwin, you are in a pretty +Unix-like environment, and you should be able to build and use libintl-perl +like on ordinary operating system. + +ActiveState Perl +================ + +By default, the XS version of libintl-perl is not built. You will not win +a lot, by trying to build the XS version, but if you can't help, here are +the instructions that worked on my system. Your mileage may vary, however. + +C Compiler +---------- + +Windows does not ship with a C compiler. Since ActiveState Perl is built +with Microsoft Visual C, you probably will not have a choice, and have to +purchase MSVC. + +Building libiconv and GNU gettext +--------------------------------- + +The XS version of libintl-perl requires the runtime facilities provided by +GNU gettext, which in turn rely on libiconv. You can both in source form +from ftp://ftp.gnu.org/pub/gnu. + +First, unpack both the libiconv and gettext sources in a directory of your +choice, open the MS-DOS cripple shell ("cmd.exe"), and cd into the directory +where you have unpacked the libiconv sources. There read the file +"README.woe32" or just type + + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 NO_NLS=1 + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 NO_NLS=1 check + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 NO_NLS=1 install + +The second command line will run the test suite (you may omit this step). + +Now cd to the directory where you have unpacked the gettext sources, and +read "README.woe32", or just type + + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 check + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 install + +You should now go back into the libiconv build directory, and re-build +the package again with native language support: + + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 NO_NLS=1 distclean + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 check + nmake -f Makefile.msvc MFLAGS=-MD DLL=1 install + +You should now have the gettext and libiconv DLLs installed in "\usr\bin", +and libraries in "\usr\lib". It should be theoretically possible to build +static versions (instead of DLLs) of both gettext and libiconv, but I +did not manage to do so here. + +Build libintl-perl +------------------ + +The Makefile.PL provided with libintl-perl normally autodetects the presence +of the required gettext shared libraries, but this test (intentionally) fails +under Windows. You have to bypass the mechanism by saying + + perl Makefile.PL DIR=gettext_xs + +This should produce an output like this: + + Checking whether we can compile the XS version ... no + => Cannot build the XS version of libintl-perl (see 'config.log' for + => details). This is harmless! + Writing Makefile Locale::gettext_xs + Writing Makefile for libintl-perl + +Ignore the warning, that the XS version cannot be built. It will be +built anyhow. + +Now do the usual: + + nmake + nmake test + nmake install + +Please run the testsuite! If it fails, and you cannot sort out the reason, +re-build the module without the XS version. + +Distribution +------------ + +If you want a binary version of libintl-perl, you either have to bundle it +with the DLLs and libraries for GNU gettext and libiconv, or you have to +build and link against static versions of the two libraries (which I didn't +manage to do). In any case, please take care that your distribution does +not violate the licenses under which GNU gettext, libiconv, and libintl-perl +are provided! Please read the following statement by Bruno Haible, +maintainer of GNU gettext and libiconv: + + Note that DLLs created with MSVC 7.0 cannot be distributed: They depend + on a closed-source library 'msvcr70.dll' which is not normally part of a + Woe32 installation, therefore the distribution of such DLLs - with or + without msvcr70.dll - would be a violation of the LGPL. This problem does + not occur with MSVC 6.0 and earlier. + +Guido Flohr diff --git a/REFERENCES b/REFERENCES new file mode 100644 index 0000000..722d43a --- /dev/null +++ b/REFERENCES @@ -0,0 +1,60 @@ +- the dvd::rip project + http://www.exit1.org/dvdrip/ + +- the Sympa mailing list manager + http://www.sympa.org/ + +- the public key infrastructure (PKI) OpenCA + http://www.openca.org/ + +- the Lire log file analysis tool + http://www.logreport.org/ + +- the GPG key-signing utility gpgsigs + http://www.palfrader.org/gpgsigs + +- (the build script for) the TortoiseCVS CVS frontend + http://www.tortoisecvs.org/ + +- the pure Perl implementation of the Twofish algorithm + http://search.cpan.org/~guido/Crypt-Twofish_PP/ + +- the Imperia enterprise content management system + http://www.imperia.net/ + +- the Imperia mailing list archive + http://ml.imperia.org/ + +- the pimp Photo Importer + http://www.grawert.net/software/pimp/ + +- midcat, concatenate MIDI files to stdout + http://ptaff.ca/midcat/?lang=en_CA + +- Luci is the University of New Brunswick, Canada's enterprise website + accessibility solution and requires libintl-perl via Crypt::Twofish_PP + http://luci.sourceforge.net/ + +- gwine, the Gnome wine cellar management tool + http://home.gna.org/gwine/ + +- gtestrunner (Test-Unit-GTestRunner), a unit test GUI + http://search.cpan.org/~guido/Test-Unit-GTestRunner/ + +- hdico, search a definition in the Hachette dictionary + http://svn.naquadah.org/listing.php?repname=hdico&path=%2F&rev=0&sc=0 + +- IWL, a GUI toolkit for html + http://search.cpan.org/~viktork/IWL/ + +- Git, the stupid content tracker + http://git-scm.com/ + +- needrestart checks which daemons need to be restarted after library upgrades + https://fiasko-nw.net/~thomas/tag/needrestart.html + +- libguestfs is a set of tools for accessing and modifying virtual machine (VM) disk images + http://libguestfs.org/ + +- serienbrief, write serial letters with LaTeX + http://nasauber.de/opensource/serienbrief/ diff --git a/SIGNATURE b/SIGNATURE new file mode 100644 index 0000000..6226464 --- /dev/null +++ b/SIGNATURE @@ -0,0 +1,419 @@ +This file contains message digests of all files listed in MANIFEST, +signed via the Module::Signature module, version 0.81. + +To verify the content in this distribution, first make sure you have +Module::Signature installed, then type: + + % cpansign -v + +It will check each file's integrity, as well as the signature's +validity. If "==> Signature verified OK! <==" is not displayed, +the distribution may already have been compromised, and you should +not run its Makefile.PL or Build.PL. + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +SHA1 8624bcdae55baeef00cd11d5dfcfa60f68710a02 COPYING +SHA1 c23f9666f3200dfa573f508fffc7aabda143f9e8 Changes +SHA1 05e0ac56fee3246fb8a0a2ad0cabe26458306f9d Credits +SHA1 ad3c45d276ebd3148c6b598ae9233f3c86cb9782 FAQ +SHA1 3728e9d8779da5a41c93445a946b69319771a668 MANIFEST +SHA1 fd14266fd54b1f98525a9bcf092f23abde4778b8 MANIFEST.SKIP +SHA1 2657eddf62fbcbedec1178bb02da78466bc64a2c META.json +SHA1 ab9eb321339b8a95b6fb3925cbd317ee3421bce5 META.yml +SHA1 6acec44d76b3d1b7b830b8464e940d461cfffd49 Makefile.PL +SHA1 c975c012aa03b8c6d1f9de52abbf965907cc12ad MyInstall.pm +SHA1 d2b5b20370e86ccd3953251d9480dc68e4640acd NEWS +SHA1 75604d9f0b593436c8419955d8002f8bd6e499f5 README +SHA1 a87fd1ee2fc58ade00fdb34ea74d105197f8cb18 README-oldversions +SHA1 75604d9f0b593436c8419955d8002f8bd6e499f5 README.md +SHA1 1d7a1690360ac140ea197a5a7cdf55aefc6f40b5 README.solaris +SHA1 5e425ffe22f0f6f30c4e74359eada8b546286dc9 README.win32 +SHA1 2ee2a53856fdb02898ffe6780770a3b101a4f01a REFERENCES +SHA1 05e0ac56fee3246fb8a0a2ad0cabe26458306f9d THANKS +SHA1 d7fe585333ed8730983a11e89ee255247cb16101 TODO +SHA1 1b250d9d7f2e479c531c9b10b54177004f396094 gettext_xs/Makefile.PL +SHA1 30348b6105515fe3eeb0cd3ad0603d8534af5366 gettext_xs/gettext_xs.pm +SHA1 e578f13c31ddd2567ef64d5abbae95469d3da71a gettext_xs/gettext_xs.xs +SHA1 4b10eea65b4a6cfc5f0511de32faaaf12106413f lib/Locale/Messages.pm +SHA1 3006e05bb21be9cdadeb73d47f3410a50b187633 lib/Locale/Recode.pm +SHA1 a45beb9001b2613945f10c81e3ed0ba437de6187 lib/Locale/Recode/_Aliases.pm +SHA1 689f4643610544c5c7d585983de6ac7d7a4f65a8 lib/Locale/Recode/_Conversions.pm +SHA1 6321487728182fc72cb1d95a350cd78b51293ee6 lib/Locale/RecodeData.pm +SHA1 835b80c6c2c4d3bb4f03bbc007511307fe296a25 lib/Locale/RecodeData/ASMO_449.pm +SHA1 8129eb072b31a8533e77b9e9eec04df629ff3b46 lib/Locale/RecodeData/ATARI_ST.pm +SHA1 b7c1a1246bff071a3a3e5043d363776bb9174a1d lib/Locale/RecodeData/ATARI_ST_EURO.pm +SHA1 7858049455685bc1af6cb36f82c5c2e7c4555ad0 lib/Locale/RecodeData/CP10007.pm +SHA1 308af5fd7b835d0a1df7680e906fd6aa5637dba8 lib/Locale/RecodeData/CP1250.pm +SHA1 c4ab3aa149174945d59b2e6df040934680c4a357 lib/Locale/RecodeData/CP1251.pm +SHA1 b3b5b20b9e8eb70c9bae088825862573c7c78bb5 lib/Locale/RecodeData/CP1252.pm +SHA1 76e620d8a7d0071d9fb2c7ae2c2a14cb64ce3988 lib/Locale/RecodeData/CP1253.pm +SHA1 dc340d4a47543ca1bdef44eae80e6f057eae6376 lib/Locale/RecodeData/CP1254.pm +SHA1 f1479d6c4d2f5d61189a0bbc83669c1ccf2fdce7 lib/Locale/RecodeData/CP1256.pm +SHA1 b74d5adabcaea527963a4c51fca0cf0c9adb900d lib/Locale/RecodeData/CP1257.pm +SHA1 8c6137b83bf129e70a3621b7c99f04a7777ecef2 lib/Locale/RecodeData/CSN_369103.pm +SHA1 c9f0226519f005f026c4625e9302e694f7b714ec lib/Locale/RecodeData/CWI.pm +SHA1 5bfb8a607cd141e4d86f980fb99aa26544e6c666 lib/Locale/RecodeData/DEC_MCS.pm +SHA1 96455e2dacf8bd59f0c68f26e94dc1e2cc1025bf lib/Locale/RecodeData/EBCDIC_AT_DE.pm +SHA1 154d2ed284845bdf930fac61a32362b0f441e2a9 lib/Locale/RecodeData/EBCDIC_AT_DE_A.pm +SHA1 8b11f92763856d6fbebc8b38f60610d51fa93ec5 lib/Locale/RecodeData/EBCDIC_CA_FR.pm +SHA1 42d41aa3afd0b96090beaccdbd711b0c385b08ce lib/Locale/RecodeData/EBCDIC_DK_NO.pm +SHA1 d40c8d6eeaeb270627163f1d8e7b236a781adc1e lib/Locale/RecodeData/EBCDIC_DK_NO_A.pm +SHA1 90ffba83d4006ae4da713b62e0e3da9b63622a1f lib/Locale/RecodeData/EBCDIC_ES.pm +SHA1 b04e325b77332587e92723261edcb67635c62c7c lib/Locale/RecodeData/EBCDIC_ES_A.pm +SHA1 d1b3a2bf92b6027c1cd9a760c7a3917ffe7f64b4 lib/Locale/RecodeData/EBCDIC_ES_S.pm +SHA1 eadac75914cca8cd009459a3b26267591889a190 lib/Locale/RecodeData/EBCDIC_FI_SE.pm +SHA1 0927c95efc30b3c17f77866e28039a0a00edd7d2 lib/Locale/RecodeData/EBCDIC_FI_SE_A.pm +SHA1 99321c9fba79b3a657788ef9403767030982391b lib/Locale/RecodeData/EBCDIC_FR.pm +SHA1 32f807769f9d68e86c1dd4dd6d3e39b9b02ea490 lib/Locale/RecodeData/EBCDIC_IS_FRISS.pm +SHA1 15402d983d18f97defcc7c725f5ce15d22ea9d02 lib/Locale/RecodeData/EBCDIC_IT.pm +SHA1 bca651293dcf301b53bb91b1141421374956b5e2 lib/Locale/RecodeData/EBCDIC_PT.pm +SHA1 809b59c0726987f278fdb37b13ccd4c152379c43 lib/Locale/RecodeData/EBCDIC_UK.pm +SHA1 2f1209ddadc272a86d582ef99fa543aa2ef4a564 lib/Locale/RecodeData/EBCDIC_US.pm +SHA1 8797f9b5692d19778c7bd2f2dc58bc4188674f55 lib/Locale/RecodeData/ECMA_CYRILLIC.pm +SHA1 ece7ee87bc89a35ef8d809fb986d63cc8c69ad90 lib/Locale/RecodeData/GEORGIAN_ACADEMY.pm +SHA1 f0ac1b5182f4ff80ebbafc5d76e2e21c84bbcdf3 lib/Locale/RecodeData/GEORGIAN_PS.pm +SHA1 ba8814bc53e69e91478eead84f6ff84d2365526d lib/Locale/RecodeData/GOST_19768_74.pm +SHA1 4673c0f04b4098209c8494836603a92cafabf277 lib/Locale/RecodeData/GREEK7.pm +SHA1 f16b628ced93c8a614b48d78b67fb73a93e510bd lib/Locale/RecodeData/GREEK7_OLD.pm +SHA1 7cdf24c185487387f37ef5e01625e41c717bc27b lib/Locale/RecodeData/GREEK_CCITT.pm +SHA1 d8de44dad790b16e33bcdc45bd584c9406ba4a0d lib/Locale/RecodeData/HP_ROMAN8.pm +SHA1 029b556a3f6ef0c1d93371a00ea155656e613ed3 lib/Locale/RecodeData/IBM037.pm +SHA1 4f8b65a31d3aac8cece31826943f164e42675f10 lib/Locale/RecodeData/IBM038.pm +SHA1 8c7c1ded734a8d3239bb481e3ca25b62d904bb08 lib/Locale/RecodeData/IBM1004.pm +SHA1 ce491873ee8f6f7984941492ae0a4bac8d71b3be lib/Locale/RecodeData/IBM1026.pm +SHA1 3dee576f930a35311ba697d89714a57f5b9b918d lib/Locale/RecodeData/IBM1047.pm +SHA1 5534de6eb15ee50f01d1c5cb2c45bd88b633401e lib/Locale/RecodeData/IBM256.pm +SHA1 71df7222dab31e5ced7d58e4ce25bd6d6a72dcbd lib/Locale/RecodeData/IBM273.pm +SHA1 fb260cba22f23389680f28f90537a73d442a1383 lib/Locale/RecodeData/IBM274.pm +SHA1 833a9c20b57f1271e8a31257951b3fee83185689 lib/Locale/RecodeData/IBM275.pm +SHA1 04debc84a21a8a114f3d7fd58e9ca77fe4e2c2ec lib/Locale/RecodeData/IBM277.pm +SHA1 ff985b3c5f32d9f097d9e2b0ff258f7064345696 lib/Locale/RecodeData/IBM278.pm +SHA1 cb78a804f1e9f080074947b5aefbf97eacf44747 lib/Locale/RecodeData/IBM280.pm +SHA1 7247f5d30812fa2205633ec2ad335d7d4c52a71a lib/Locale/RecodeData/IBM281.pm +SHA1 68b3077204aa2bc338a7e7aa0d39c8d38c6273a8 lib/Locale/RecodeData/IBM284.pm +SHA1 a16dfdc2fa07711ef12423583e956a9f7177d420 lib/Locale/RecodeData/IBM285.pm +SHA1 bbc92481260c6fcc0f3825c0ab3cfc2cca320830 lib/Locale/RecodeData/IBM290.pm +SHA1 7d7f2fa74b16aa9b26f7ab602bc224e1d86a2301 lib/Locale/RecodeData/IBM297.pm +SHA1 8cf64281a2ba63680705d024b5d29b4dab55f2f1 lib/Locale/RecodeData/IBM420.pm +SHA1 511295681970caa0eb5c1a0aaf14575d7418dec8 lib/Locale/RecodeData/IBM423.pm +SHA1 085c85205e8fa17c9b3c36254ab3a9a57ffa86b0 lib/Locale/RecodeData/IBM424.pm +SHA1 6c027bb43f41e314d02775d2c3beac46b348cc72 lib/Locale/RecodeData/IBM437.pm +SHA1 1563fca1be81d24d2cc54c1dce10d39c3db0fc3b lib/Locale/RecodeData/IBM500.pm +SHA1 80f280842ac2606f19e728e14645458cd98e9651 lib/Locale/RecodeData/IBM850.pm +SHA1 0b8f3b69cf321af2d45cbf754b7e82d1898c03b4 lib/Locale/RecodeData/IBM851.pm +SHA1 9d8a3599b78329c7c6eb5fea19f644a76f8dcb1a lib/Locale/RecodeData/IBM852.pm +SHA1 84ba50e852938c1915ff1033b479dd73f04b9109 lib/Locale/RecodeData/IBM855.pm +SHA1 0f5312e8b46725aca00523902c20466c441545ea lib/Locale/RecodeData/IBM857.pm +SHA1 d912b69234a8b8251fbe65ec71e5a62e24f09f3f lib/Locale/RecodeData/IBM860.pm +SHA1 b2ebdd9e4f387da37e0b785bc5102375fb972b03 lib/Locale/RecodeData/IBM861.pm +SHA1 ffdf71881b8c5b7ba80c971ca49e51cebd2f5209 lib/Locale/RecodeData/IBM862.pm +SHA1 987e1ca230f219aab414a9b4c22f3224d6a3c689 lib/Locale/RecodeData/IBM863.pm +SHA1 0d230a5b38b946ede086614f16eeda663c9a264c lib/Locale/RecodeData/IBM864.pm +SHA1 a664403a191d5edf34e62145986302cef4f2d5b5 lib/Locale/RecodeData/IBM865.pm +SHA1 cdda6faa88d6f5be99d5a36166845b557dd47981 lib/Locale/RecodeData/IBM866.pm +SHA1 b08ae240e3cd07cf25749d4d3f81f5d80fe43a91 lib/Locale/RecodeData/IBM868.pm +SHA1 e1b46485f511a449d4ae92af1fe6ad2044a89fd8 lib/Locale/RecodeData/IBM869.pm +SHA1 c1fae93092ab02f5873c07f7da9cdb5484fe505f lib/Locale/RecodeData/IBM870.pm +SHA1 59b87d4c73f832a48bde8297b82a943bc01ddd8d lib/Locale/RecodeData/IBM871.pm +SHA1 94b856fba467cf77024e2bd469eedd2072a7fde8 lib/Locale/RecodeData/IBM874.pm +SHA1 ae5b70afec1abf31d167a0a33729d8679ca5e2aa lib/Locale/RecodeData/IBM875.pm +SHA1 2af9e523e9bec0ce54fd6b68edae1ba9d7e9ac96 lib/Locale/RecodeData/IBM880.pm +SHA1 5cd8e1c7441edb443a4552276af3533676c8b0ab lib/Locale/RecodeData/IBM891.pm +SHA1 aa946a4e53821a2244a507466709023d07ce139b lib/Locale/RecodeData/IBM903.pm +SHA1 df347f68554f683e071bdd46fd0a0f2444750dd4 lib/Locale/RecodeData/IBM904.pm +SHA1 3b40ccf097efbc686cf576aa6e54031c49f07acd lib/Locale/RecodeData/IBM905.pm +SHA1 9c23306190c9cc77bd5bf9ce33e9ac7cd34a3777 lib/Locale/RecodeData/IBM918.pm +SHA1 dd095762175963882d64ecaeeb2be208ca66b4a4 lib/Locale/RecodeData/IEC_P27_1.pm +SHA1 1ce5c7cb26d66cb75ef8bc770ce5e9dbeb5be94a lib/Locale/RecodeData/INIS.pm +SHA1 9580a549b448d919ad9eeee1b8b3ae26e323333e lib/Locale/RecodeData/INIS_8.pm +SHA1 fcc427f6b2f2264d4043a00848888b6614955d59 lib/Locale/RecodeData/INIS_CYRILLIC.pm +SHA1 04a6ef6bba82fa54902e0dfbef0dae1ecc23572d lib/Locale/RecodeData/ISO_10367_BOX.pm +SHA1 b010cbf093c84de0ef1d8b0ae51213e2e78087ab lib/Locale/RecodeData/ISO_2033_1983.pm +SHA1 f8ff2cfa750cfeda01737744720f48b46c08caa2 lib/Locale/RecodeData/ISO_5427.pm +SHA1 caeb2e0f1a5b377d9a1e2e9ed02b68c3b0ba3d43 lib/Locale/RecodeData/ISO_5427_EXT.pm +SHA1 9aec1d435fbfaabcc816c664a282eb483da262bf lib/Locale/RecodeData/ISO_5428.pm +SHA1 7b79c98e44a3ef7758fd33c594bbdfd7048a9a78 lib/Locale/RecodeData/ISO_8859_1.pm +SHA1 8a9135a1a8cf118e76732c7cef3c0e47c6ebc2cc lib/Locale/RecodeData/ISO_8859_10.pm +SHA1 72e53866b07a350c62fe359d56009e97a131ac44 lib/Locale/RecodeData/ISO_8859_11.pm +SHA1 c1acd0671248d62b2f666275788e525e69aaf7f6 lib/Locale/RecodeData/ISO_8859_13.pm +SHA1 de8bc21262c082499691e179e133df1138fd3db6 lib/Locale/RecodeData/ISO_8859_14.pm +SHA1 b74cd6b6e3a34201446982d7f6303b1d7ad10100 lib/Locale/RecodeData/ISO_8859_15.pm +SHA1 3a4d4d642333a566b0ec8b22e2192ec1221e26f2 lib/Locale/RecodeData/ISO_8859_16.pm +SHA1 3892779ba07aa2fd862217448995bccee3814017 lib/Locale/RecodeData/ISO_8859_2.pm +SHA1 35287baf6005f212cedba3e6ca4863710d981a90 lib/Locale/RecodeData/ISO_8859_3.pm +SHA1 430b53f510eba26bbec6ab2bd959ff80e6380aff lib/Locale/RecodeData/ISO_8859_4.pm +SHA1 9f1dc62f5040bb5e9b854df6f989c45f4602771e lib/Locale/RecodeData/ISO_8859_5.pm +SHA1 3faf9b0a88ac81fdfcdf60944e54c1951710d344 lib/Locale/RecodeData/ISO_8859_6.pm +SHA1 7d8f481e91eaae120738ae4a266941432bd7fecc lib/Locale/RecodeData/ISO_8859_7.pm +SHA1 365baa4a775e012d2a568c123ee0b80915dad604 lib/Locale/RecodeData/ISO_8859_8.pm +SHA1 bc3a1ff7a7ca4987df8cfda26c4c14dbb6ccc5f9 lib/Locale/RecodeData/ISO_8859_9.pm +SHA1 828fa6c043812eb2c00578a3eb0b64e9d2a41410 lib/Locale/RecodeData/KOI8_R.pm +SHA1 1d83f9d0b3e4a43fdf1b4e7f2ba6e9f338b08a8e lib/Locale/RecodeData/KOI8_RU.pm +SHA1 23d5674a052c69c22a6c141e27c87cf6dbdf9dd1 lib/Locale/RecodeData/KOI8_T.pm +SHA1 5b446d49bc58dbe61c09a639f78df7433641e453 lib/Locale/RecodeData/KOI8_U.pm +SHA1 5d04dc76a7a26042811218c3ce14aedb7b3d2540 lib/Locale/RecodeData/KOI_8.pm +SHA1 5fbfb2d91c01f044139ad95b1300583260b22719 lib/Locale/RecodeData/LATIN_GREEK.pm +SHA1 c7412b63db2ea3286a505024ec5ae5f290c8775e lib/Locale/RecodeData/LATIN_GREEK_1.pm +SHA1 7f10950d7747004a6be53dfbadfbc63db0ae41f1 lib/Locale/RecodeData/MACARABIC.pm +SHA1 d5b23cdebfd1dd67efcbd770e666de8e004e45ae lib/Locale/RecodeData/MACCROATIAN.pm +SHA1 9ce1fd4120061d1d095ce84133fe874b71d1ae24 lib/Locale/RecodeData/MACCYRILLIC.pm +SHA1 aeb7957444e33f2515c27bee95f9beb08d319958 lib/Locale/RecodeData/MACGREEK.pm +SHA1 8d4b29f49bc6c09869c752b1ea10085151d62467 lib/Locale/RecodeData/MACHEBREW.pm +SHA1 17544ca2c0c44aea5c0f72a9784d717abef834f2 lib/Locale/RecodeData/MACICELAND.pm +SHA1 567e64422a9041f4d1b694f08ca620ceac6ab269 lib/Locale/RecodeData/MACINTOSH.pm +SHA1 b75527e978c600f7a09fd05202aadcde48449754 lib/Locale/RecodeData/MACROMANIA.pm +SHA1 70f37579ec36f7114d17f2d5d0ad0b21cfcf1096 lib/Locale/RecodeData/MACTHAI.pm +SHA1 11e1dd57f928905773914e9f088b895b7e2a234c lib/Locale/RecodeData/MACTURKISH.pm +SHA1 8120e7742fe628c091c151d0f1155a72b0c2755d lib/Locale/RecodeData/MACUKRAINE.pm +SHA1 322f01675403a208e8c651e1367a975068f5fc94 lib/Locale/RecodeData/MAC_IS.pm +SHA1 268a8e7db1f71c81fbee7aaa90ffba26bb8a4c7f lib/Locale/RecodeData/MAC_SAMI.pm +SHA1 71b70fc071318dd16543c9a8e2022fda99690308 lib/Locale/RecodeData/MAC_UK.pm +SHA1 7f2a1e880a12e35a60ade63ee0a20277a6ce56c3 lib/Locale/RecodeData/NATS_DANO.pm +SHA1 77d87844aef5a9cd73a623f83549d40848d37da1 lib/Locale/RecodeData/NATS_SEFI.pm +SHA1 c8eb3d3e117243bbbbd5d296971780a2f0c815a7 lib/Locale/RecodeData/NEXTSTEP.pm +SHA1 50e21de366581689de0669ac57b6cfc77a4be72b lib/Locale/RecodeData/SAMI_WS2.pm +SHA1 c39db6e8f9d8e7bd35dbe350759154bbc575ebcd lib/Locale/RecodeData/TIS_620.pm +SHA1 af81a1ce22a0b1c5b02ed53ead2479144e20b8e8 lib/Locale/RecodeData/US_ASCII.pm +SHA1 f18507e34d3b456c58e16cb08e7a500abe42b391 lib/Locale/RecodeData/UTF_8.pm +SHA1 c685bb3ee123f47f5c6a0b587387c8e2c0a62c00 lib/Locale/RecodeData/VISCII.pm +SHA1 707accfa4b13cfb56ee4878d672ca3333c6b9f79 lib/Locale/RecodeData/_Encode.pm +SHA1 9acf649b3dcd1cfab18b2b3770ed4d35bc2735fc lib/Locale/TextDomain.pm +SHA1 a3e1458fa9be5ca8a66dbded195d82bd8dd65e10 lib/Locale/Util.pm +SHA1 d432d3f6abcaaac711a4ae8fae068654027c7325 lib/Locale/gettext_dumb.pm +SHA1 1af5f8bad7acc6193005069c77100d566b6dda7e lib/Locale/gettext_pp.pm +SHA1 6509ebe55418d218757f785d074831cf6e45228c lib/Locale/gettext_xs.pod +SHA1 b468b12694d6e43bef62a0fbae8e261ea7ae614e lib/Locale/libintlFAQ.pod +SHA1 167cd8b21925447925c6aeae7f0f4a93b6dac997 sample/README +SHA1 96c955706864a8530766e3b4c0599e0de8fc271b sample/simplecal/.gitignore +SHA1 4c4d3efeb5ad2b80eeddde426cd2b0eebd9fea15 sample/simplecal/MANIFEST +SHA1 9303747cc9e7bab310fd6bfa7dcb285780d6deb2 sample/simplecal/Makefile.PL +SHA1 035283b7f6a451e79ad2e6d000496bfe6439171c sample/simplecal/README-NLS +SHA1 4b3e82e4eeba33252ba3033a0dd6d565fbd8f628 sample/simplecal/TRANSLATIONS +SHA1 d97d4682511ee511c01d5317e41ca489b47d82fa sample/simplecal/bin/simplecal.pl +SHA1 c06e8560bc416dd36c83a77ba4c70f1db86b40f7 sample/simplecal/lib/SimpleCal.pm +SHA1 118512d55ef9180b4a0e2092632435d3035db5f7 sample/simplecal/po/Makefile +SHA1 9de33fdc3680eb1e40b675651d0d3dd45f40afb1 sample/simplecal/po/PACKAGE +SHA1 a01083fb1eea3e1668f8ab0a71489adaa67ca659 sample/simplecal/po/POTFILES +SHA1 b069cf9ca20deee0e0b0bf649f4c18628eae71cd sample/simplecal/po/ar.po +SHA1 d999e42344cbf3c9eafd22346c5a1801d0b58e8e sample/simplecal/po/ar_SA.po +SHA1 6bdae15d4808e9d40e16d7f62092e1d83a2ebe44 sample/simplecal/po/com.cantanea.simplecal.pot +SHA1 2718ecfa83dbf1d58d116a536e0dc85ef1571efe sample/simplecal/po/cs.po +SHA1 daf901d2b8cbf3876130a6b6222130843398eb0b sample/simplecal/po/de.po +SHA1 26d92e475d2127ba74b0594cc13c6e317d58a879 sample/simplecal/po/de_AT.po +SHA1 9d27384fd29a30b0da1aaa6125cd1dfefd17b977 sample/simplecal/po/fr.po +SHA1 1ffff66f95ca6bb2abc1c18016c8af5ec7f60a02 sample/simplecal/po/ga.po +SHA1 9b6573b66948573e2715ea236d0be336d36863f5 sample/simplecal/po/it.po +SHA1 da895bb4654f5c9990c4c58db7cf43be4d3302c6 sample/simplecal/po/nl.po +SHA1 89ce824ea1a71c80d3d94890dc12189ec624586c sample/simplecal/po/pt.po +SHA1 6f9e9d879d4bde895f7be913fbc78131ce200b19 sample/simplecal/po/pt_BR.po +SHA1 48bf3e6ea2c1eb3ea049a94bce8385761fbc076b sample/simplecal/po/ru.po +SHA1 b29369d3dd4ad308039e9c1933bf9c83835e67cd test.pl +SHA1 76df713be4fc9628d643d996919217efdbbfeedb tests/00gettext.t +SHA1 1aaf55cc0d546d1aaefa746e072b9f4bbd049881 tests/00recode.t +SHA1 75de6e83e94c1ec377b9d65cb7583dc3a8023019 tests/01trivial.t +SHA1 6b8cea78474f0ee98a5b130573f44781c79ed90f tests/02asmo_449.t +SHA1 15f7418ae16663e334b74be65d81a713ade81bda tests/02atari-st-euro.t +SHA1 5f4cc9a999d0dfc854e5013877bb218db3de3364 tests/02atari-st.t +SHA1 3746f4c62f10508988a207b0a67c74a9a41c2fed tests/02cp10007.t +SHA1 412908e3e1ed0c0292169c4dc6c791180817bf2c tests/02cp1250.t +SHA1 2a848aacdab09db4df059333d423d3785e9d5cfa tests/02cp1251.t +SHA1 6638a51dc57bcff90d9fc3cbb14dd0017f494dd6 tests/02cp1252.t +SHA1 e324bf802dd3ba57a0c6b7d44303b8dfd3fe4b1f tests/02cp1253.t +SHA1 1859ce37b811d1b8c3caa48a08b1fc54c2a5a0c8 tests/02cp1254.t +SHA1 3dbc1d0f6874c383ba63495b5c01762c33f75958 tests/02cp1256.t +SHA1 628457b78469d51aaaba87421b2048c36f71f3e6 tests/02cp1257.t +SHA1 ab654bc7685a7ce0e23f7bd6d0e6b2df1b30398b tests/02csn_369103.t +SHA1 ece756377ea2c8ac46f9aced2a7d2b07af71320d tests/02cwi.t +SHA1 a801269633d6cfe952f8f765e89b42f6571dadcb tests/02dec-mcs.t +SHA1 048b2a5652b8590a161145254f44b9e9c0aa1f88 tests/02ebcdic-at-de-a.t +SHA1 6032437a3115e93714ee10fb1aabcdc0995c3a44 tests/02ebcdic-at-de.t +SHA1 1bd8f3423208361fd0ad0b8b462b2ec7c0ad78c0 tests/02ebcdic-ca-fr.t +SHA1 b47fd497dd754d25a50c168745f728f20b16d815 tests/02ebcdic-dk-no-a.t +SHA1 9acda8b3adfab99f8bf77f9bcf0cf351148291c6 tests/02ebcdic-dk-no.t +SHA1 49989ed120c3248f67d1451f9413f13489fb5742 tests/02ebcdic-es-a.t +SHA1 0bbbc67f4d6c52aa804f93b2379704bfd95b39ca tests/02ebcdic-es-s.t +SHA1 3a9f24cb4597f8084eb1609c11ff3f059c139bc4 tests/02ebcdic-es.t +SHA1 79ccd2bfd4882fc31b703977ef7577233dd84a52 tests/02ebcdic-fi-se-a.t +SHA1 9461e9dc41440beb538e20fc1b34fde487249dce tests/02ebcdic-fi-se.t +SHA1 34f632f52e7a097ce8d1de05c71e1ba13d3c54f9 tests/02ebcdic-fr.t +SHA1 f0c88053cb05dd07e61659652467a858dbdb4c2d tests/02ebcdic-is-friss.t +SHA1 4c29ef39563a68d99684a3d5683c9083b012081e tests/02ebcdic-it.t +SHA1 16bfb15c88754fddd80b42fdaa7b6aae8a9a716f tests/02ebcdic-pt.t +SHA1 2b15b5a60b4e529043cb7415f3b4f6d8d8ab7851 tests/02ebcdic-uk.t +SHA1 c4211df7ef58e9f5cf0727670db3da1fbfaf5af1 tests/02ebcdic-us.t +SHA1 299236f6df680301fc4602c0f2e213197ceb0d50 tests/02ecma-cyrillic.t +SHA1 7fca538131e506e356e71d6d63524bac15c6344b tests/02georgian-academy.t +SHA1 c049cc226e317b01b2cd4641c7322703a96b96f0 tests/02georgian-ps.t +SHA1 bf00499abd30fc186e289f39430c2b0b0670f75a tests/02gost_19768-74.t +SHA1 8aaa384d9276225ac16a40c4d2762e84a1da1ed8 tests/02greek-ccitt.t +SHA1 0148309f5daf8d13a12687fc7970848d928609d8 tests/02greek7-old.t +SHA1 3ee6d0f48da72e0114b5910452f7e7b94f23928f tests/02greek7.t +SHA1 d9a6a6513356f2fb1ce92910498fdbc113ded391 tests/02hp-roman8.t +SHA1 068841252da4c31dbb9ab0d9c20d15532881d582 tests/02ibm037.t +SHA1 bedb54ffbe20f262f03b0164f15c2baa0fa84485 tests/02ibm038.t +SHA1 fa2dd4dbb23c141f6109ebb19c54fa0da8de3c1b tests/02ibm1004.t +SHA1 8aed3c4cf045e40912d76dbccc69f05fc14cba5d tests/02ibm1026.t +SHA1 6fca99d9ba849eb71e1daae5a4753826d2ddf231 tests/02ibm1047.t +SHA1 c1676bd239234cc24f014bd8eeeffe816d68da4e tests/02ibm256.t +SHA1 ccecb33064599a8500de9da97c1e14bf871b2f1b tests/02ibm273.t +SHA1 86ba2ace54553c49dee6e3cd5a932e8b44a61bf7 tests/02ibm274.t +SHA1 ed124e916b61307a52e1fcd5ca906594c16c4c6f tests/02ibm275.t +SHA1 941ddb459e8005dc0b435d3b57ae9d954fa33987 tests/02ibm277.t +SHA1 d8c575f48f34bf94320f40a85c218198e0db1f0a tests/02ibm278.t +SHA1 b7651e3209d51c02434007a9c2013606a2d0a8e8 tests/02ibm280.t +SHA1 bc10e8677b97a81c62d762c10a0a4d180de58763 tests/02ibm281.t +SHA1 e625a7f09236ea3aa4ab550887c0f0cf4c054038 tests/02ibm284.t +SHA1 9a3bbb2afb3a31f2ef81df473e1ae14eaff67adf tests/02ibm285.t +SHA1 b08eb0be3fc7b6f1ebdc137a2d934b61bf8732a8 tests/02ibm290.t +SHA1 a375935b40d9051521ac96be36aa31a185c73914 tests/02ibm297.t +SHA1 8aa4c00fa87f3016e9c3211cf934c0bb6b1bceb6 tests/02ibm420.t +SHA1 5a7e73a6a3a5e89f8ff70e85c837461ea57ef974 tests/02ibm423.t +SHA1 5f36bf32e66ae1acd2ec9ef5c4e6b121be207a15 tests/02ibm424.t +SHA1 0367b9d095291142c0ac76db3f1a79234ec2e868 tests/02ibm437.t +SHA1 616a4465cc91f080206dd6cc912deef769aa7763 tests/02ibm500.t +SHA1 75bb689b7ac3e4ef91f12f8c2eeb20b6bc77ef03 tests/02ibm850.t +SHA1 1450c8c63699b7c0776f508c13a4033ce3066d8d tests/02ibm851.t +SHA1 1f91937bf714c02ee708c305e011b3d2879a1048 tests/02ibm852.t +SHA1 648395b81f945ab79d915b8edaf057d1be6e8127 tests/02ibm855.t +SHA1 6cb9c456995ad924d474c9352026177a86c7e878 tests/02ibm857.t +SHA1 7f0a8d999259afaff76666f71095f3cc6045b22c tests/02ibm860.t +SHA1 129d281f5c4336c3700ecfa056f2e13eb9ab07c7 tests/02ibm861.t +SHA1 3ec582c47191d0005e113993b5f753a19f7d7f52 tests/02ibm862.t +SHA1 17f0f03c87a742d897807503cd119f710f8bba1d tests/02ibm863.t +SHA1 b20c2f7b6b1f66193c433e30ecfebfcb1f9324b2 tests/02ibm864.t +SHA1 04286980935a441f6f86316932dafc60ce8c7df9 tests/02ibm865.t +SHA1 c72f8f3a9c3b3ce9f2174819800ad2710c8ec029 tests/02ibm866.t +SHA1 6d4d6805cd582e8daba1d5911dd7c3b9921180fd tests/02ibm868.t +SHA1 a3bb09767ccc35743f6f42ffa8154668f1ed2758 tests/02ibm869.t +SHA1 6529dc421d6cd174532219220e6923f3a3cee4b9 tests/02ibm870.t +SHA1 28e5455b019cd5804a3faaecaacfd3b1fa5be89c tests/02ibm871.t +SHA1 5de56e47cbb1ccb2ae6e331e98b55d749a8dff98 tests/02ibm874.t +SHA1 a481a73664678d6dc67bc92c8a808339793604fd tests/02ibm875.t +SHA1 3b2bf280ec5b7d4bf609e63352120fa0033baab2 tests/02ibm880.t +SHA1 700c9cb238ad245c9eb1d7e81ccb144dd8a59d08 tests/02ibm891.t +SHA1 3dc27b08dc788866c66687504e0b45b8d5605e16 tests/02ibm903.t +SHA1 b14b634cedf43f17ffcf5003af1de97cfb00d1d7 tests/02ibm904.t +SHA1 5d7de73f91d45d96ccb22b2b3aca9a7a026301e3 tests/02ibm905.t +SHA1 fed75c205d98fd2ae7510e3d1256604a4e32d8cd tests/02ibm918.t +SHA1 8da200497f6a2b41be943f6b131c1c739a314886 tests/02iec_p27-1.t +SHA1 1995df227b1ca0cd7c696d9e256fc83b998806e5 tests/02inis-8.t +SHA1 6042f86cb47a009d332a423a998d24294cf346b8 tests/02inis-cyrillic.t +SHA1 ec99344c6ae6d08195f4467f39316bc7e7986c90 tests/02inis.t +SHA1 9b9b92dd573401f75a3eee2049de01d3ccbb987f tests/02iso-8859-1.t +SHA1 aa7cf1d183dc51cb43e393cd78c6834499f82bb4 tests/02iso-8859-10.t +SHA1 417d0b33dfc275c758911277f11ca23ac962086a tests/02iso-8859-11.t +SHA1 68dd801312d61e4a1e7e10ad79d8a902a2c6a6bb tests/02iso-8859-13.t +SHA1 8e6356ace0102966566cda44e96346c3afd65c96 tests/02iso-8859-14.t +SHA1 826381795c89a372a11224c2052d8907f2c97dbd tests/02iso-8859-15.t +SHA1 d27b3067545abbf96af912451b2830fed4a03abb tests/02iso-8859-16.t +SHA1 02ec85b65e00a988f01a8ee2325f74be282756ba tests/02iso-8859-2.t +SHA1 772bead8a8c9f055d3604793bd179deebb781809 tests/02iso-8859-3.t +SHA1 b29be8edfa6b2059a525184ea7f19e1d1d9529c2 tests/02iso-8859-4.t +SHA1 de1d34dad350557e85951b4d3a70a0158b78a0cc tests/02iso-8859-5.t +SHA1 8b735c7458832c5c8226228b83400ddd448b0fd1 tests/02iso-8859-6.t +SHA1 3cdf799653257e4045ce9eb964af60639023ab42 tests/02iso-8859-7.t +SHA1 882cfb637b1652e9f60f5d7ad89a04a30a9339b2 tests/02iso-8859-8.t +SHA1 ab7360de3e0f83a031d25b9cc6774921f678112a tests/02iso-8859-9.t +SHA1 5b3c7c5e16bd82aed8e4ad42f4f002896565eac9 tests/02iso_10367-box.t +SHA1 755b96ea39a22a880828b065ec391bf81c84a89e tests/02iso_2033-1983.t +SHA1 e0806b3733acf2e44e636be866c63a916b2e6787 tests/02iso_5427-ext.t +SHA1 b8adfea29292723fe33213c6b95826ff8ff70aff tests/02iso_5427.t +SHA1 7477f7be56c7df215cc303018438fa6e64b2dd6e tests/02iso_5428.t +SHA1 b5932e37fb183df7bf554f56d382d1bc203bfe1c tests/02koi-8.t +SHA1 c4ad19ccce4c064e2e1e38b2c45d34ec153746ed tests/02koi8-r.t +SHA1 e15ffe5f273294ab85e92bb848fb65e3927befd7 tests/02koi8-ru.t +SHA1 b4ef19d2f8df72dbf89c607f6d011baaf0c3f84f tests/02koi8-t.t +SHA1 3e06e0c6def450e4084e2892d972dc57585c43d1 tests/02koi8-u.t +SHA1 1b3702366a43fcbc7aaaaa62412c1aebbff8a932 tests/02latin-greek-1.t +SHA1 1fc8f3750459f4fd2bdc06699f220b8542ff8f2c tests/02latin-greek.t +SHA1 424e3f118ecab430f5907baed454dd71b6be9b5d tests/02mac-is.t +SHA1 cf6b2be1cd8a89551a6217633e1bc78e94888d03 tests/02mac-sami.t +SHA1 583d166c36174bc028ac212b4b07c081f5405214 tests/02mac-uk.t +SHA1 b665ecc52ecff7f8453e2d4bf1aed75dd4276a7b tests/02macarabic.t +SHA1 5656b38a1aeddd88771176f68987dfb89db32e21 tests/02maccroatian.t +SHA1 377cc1ff9ce7925531a358d6929c9a00675a0bef tests/02maccyrillic.t +SHA1 22d0138eeebeeae784593327bb5bbd0d3a0fd6ee tests/02macgreek.t +SHA1 43acc40125c13cf07e173a377cc792e04f1b4de3 tests/02machebrew.t +SHA1 c70c7dec3d27bf4a9d58ed32a6a12110ce3557e7 tests/02maciceland.t +SHA1 5a2ef4ea1f0315a20728ea5b4c8313c65bfcd5d4 tests/02macintosh.t +SHA1 74de7ec0fb84b0a295d1d430028aeff57d226660 tests/02macromania.t +SHA1 cda48214c543b1adb5624a63dd7d3a551b9dc443 tests/02macthai.t +SHA1 2b840000eac62699caf24971c2b841bf209cf9b8 tests/02macturkish.t +SHA1 3a40a8f12e08f8bb1ae071b68e5aec0e36664154 tests/02macukraine.t +SHA1 1f1f3ec7560c100655354a9e56e8e23b12ea7091 tests/02nats-dano.t +SHA1 833b45a9fe09f56e09d01b178588766bd2ceaf23 tests/02nats-sefi.t +SHA1 2048985631f38c88ef51cdd7ff471a32bd52f9f0 tests/02nextstep.t +SHA1 3360c8ab9d23b7ae4a1b788ba39e1b201756adf4 tests/02sami-ws2.t +SHA1 eb9cac49bb5e38732a69adcc439373ddc74a2d81 tests/02tis-620.t +SHA1 1d325459023e00c46a3abf5597c6588395267cde tests/02us-ascii.t +SHA1 a576cb58e11cd7963144caf9c6bf8f81ca565d71 tests/02utf-8.t +SHA1 f8e772505fed60dfde0809069300cf0c6ee3c66e tests/02viscii.t +SHA1 3c8856c52ac0de8afa8f5f6776da7759e7594769 tests/03_tester_david_pp.t +SHA1 3c8856c52ac0de8afa8f5f6776da7759e7594769 tests/03_tester_david_xs.t +SHA1 df4f0ca8fc81110fbbece247cee0ca20c1e632e8 tests/03bind_textdomain_codeset_pp.t +SHA1 df4f0ca8fc81110fbbece247cee0ca20c1e632e8 tests/03bind_textdomain_codeset_xs.t +SHA1 449b8f6c85956c062d2981b97e959a8d2ac4bae3 tests/03bind_textdomain_filter_pp.t +SHA1 449b8f6c85956c062d2981b97e959a8d2ac4bae3 tests/03bind_textdomain_filter_xs.t +SHA1 913d0811ff2a946e2145ec61a4c364b882f24838 tests/03bindtextdomain_pp.t +SHA1 913d0811ff2a946e2145ec61a4c364b882f24838 tests/03bindtextdomain_xs.t +SHA1 8e96759a0edbd7b7ed031616b271dcc181494dc3 tests/03dcgettext_pp.t +SHA1 8e96759a0edbd7b7ed031616b271dcc181494dc3 tests/03dcgettext_xs.t +SHA1 b4ac62e3043755175c24e8bdb2fc9df2f2b03f7c tests/03dcngettext_pp.t +SHA1 b4ac62e3043755175c24e8bdb2fc9df2f2b03f7c tests/03dcngettext_xs.t +SHA1 9fddd3ce5a92d9ec34aaede921a485795a1f92b7 tests/03dcnpgettext_pp.t +SHA1 9fddd3ce5a92d9ec34aaede921a485795a1f92b7 tests/03dcnpgettext_xs.t +SHA1 60d0e8e7b6533c14a9ad3c034ba7c8fcac297e71 tests/03dcpgettext_pp.t +SHA1 60d0e8e7b6533c14a9ad3c034ba7c8fcac297e71 tests/03dcpgettext_xs.t +SHA1 9bd1f333e4c9a3554c42b17962f5ede6b6dbe684 tests/03dgettext_pp.t +SHA1 9bd1f333e4c9a3554c42b17962f5ede6b6dbe684 tests/03dgettext_xs.t +SHA1 e48e9c465821da372e5d79802d8bf4fdcae5a414 tests/03dngettext_pp.t +SHA1 e48e9c465821da372e5d79802d8bf4fdcae5a414 tests/03dngettext_xs.t +SHA1 d8944efc503fc75db4d42bfd73f5675851c775a1 tests/03dnpgettext_pp.t +SHA1 d8944efc503fc75db4d42bfd73f5675851c775a1 tests/03dnpgettext_xs.t +SHA1 338acf827a80fc34a99b99009e3807ba7601f527 tests/03dpgettext_pp.t +SHA1 338acf827a80fc34a99b99009e3807ba7601f527 tests/03dpgettext_xs.t +SHA1 82de9da38bbbfb89796ab4d95f7169439ae980cf tests/03environment_pp.t +SHA1 82de9da38bbbfb89796ab4d95f7169439ae980cf tests/03environment_xs.t +SHA1 47a95f4e0ed150f41ec0eeae6904c4217751f385 tests/03gettext_dumb.t +SHA1 e8175d1587d83f8d670c0a0269497d00a466f016 tests/03gettext_pp.t +SHA1 e8175d1587d83f8d670c0a0269497d00a466f016 tests/03gettext_xs.t +SHA1 7e1819160386648e9a6a357d755cf3cc39ff6433 tests/03language_pp.t +SHA1 7e1819160386648e9a6a357d755cf3cc39ff6433 tests/03language_xs.t +SHA1 72f29cda976a980b942bbd3b402ca639a191b089 tests/03ngettext_pp.t +SHA1 72f29cda976a980b942bbd3b402ca639a191b089 tests/03ngettext_xs.t +SHA1 0dcd38f3f03ad64b1f30c5d40b082122f51c6b2b tests/03npgettext_pp.t +SHA1 0dcd38f3f03ad64b1f30c5d40b082122f51c6b2b tests/03npgettext_xs.t +SHA1 96a5dc1a9e199739842a09c999757b55a7bfd5f5 tests/03pgettext_pp.t +SHA1 96a5dc1a9e199739842a09c999757b55a7bfd5f5 tests/03pgettext_xs.t +SHA1 61d42e04fae2ae1e76c25b684b3aa2c735b81952 tests/03textdomain_pp.t +SHA1 61d42e04fae2ae1e76c25b684b3aa2c735b81952 tests/03textdomain_xs.t +SHA1 1778bea35b0cd8fc1ad7e3d50fdd587706426007 tests/04find_domain_bug.t +SHA1 0c0aacc76a0fe1df0e2c0b489c7c398cf23cf823 tests/04russian_plural_function.t +SHA1 8ce53db123150ffe7f18166aea023ee5ef64d998 tests/04scalar_noop.t +SHA1 464f2fe670fb9554dcf8c7b274cff1d4a9455201 tests/05options.t +SHA1 cc628e7e010ba15e345aadf8745cf2ddd2ac7a7e tests/05parse_accept.t +SHA1 19ba2b54f0fce6d48fbcda660c12563231a9c56e tests/LocaleData/de/LC_MESSAGES/additional.mo +SHA1 ff510c3e687efa605c7bb038d07aa139bbce02aa tests/LocaleData/de/LC_MESSAGES/existing.mo +SHA1 f4212afcab01a4e7da3644eb29b6ed367d90e9e0 tests/LocaleData/de_AT/LC_MESSAGES/additional.mo +SHA1 883835f4382d2fbca96dab9e1f20438a59941e69 tests/LocaleData/de_AT/LC_MESSAGES/existing.mo +SHA1 227009e0e40370ee0bbc19c0086d0e52bc1bad9e tests/LocaleData/xy/LC_MESSAGES/additional.mo +SHA1 d451647a90af7c69c7f35dc94a31c2bfacab290d tests/LocaleData/xy/LC_MESSAGES/existing.mo +SHA1 cdd479809eed189cb4f9325fc4c93b5c417ae27d tests/LocaleData/xy_XY/LC_MESSAGES/additional.mo +SHA1 f03bb29471a4791a7d90f0684ef4cb5dc5518ae0 tests/LocaleData/xy_XY/LC_MESSAGES/existing.mo +SHA1 f37e1e7367d05e4ac6368040d4bfc3a698acbfa0 tests/po/Makefile +SHA1 4a5feb8e042c2fba5d305c7f59ac9dea0cfac40a tests/po/additional.de.po +SHA1 35af151717b920ec86a1023dbad29b6a1b9b1e3a tests/po/additional.de_AT.po +SHA1 d0b4fd3796d6e1c65d5e148462bbfd25039f2b28 tests/po/additional.xy.po +SHA1 d080d61b0ebdbed4367e3127fef20056dcfeb9a8 tests/po/additional.xy_XY.po +SHA1 8dd756340d2c956a930dbde77594c22d332ebc83 tests/po/existing.de.po +SHA1 9e5e4ed209397bbfa7539076a136bd72e3aa9148 tests/po/existing.de_AT.po +SHA1 75f164ded24c6a4418c43492a51d685efca2d65c tests/po/existing.xy.po +SHA1 b855afe7fdba66ec7ec241079309df31f67a1147 tests/po/existing.xy_XY.po +-----BEGIN PGP SIGNATURE----- + +iEYEARECAAYFAloES1EACgkQOo0HNPWNDz3ibwCfZOp3VEvgSZkmAIP4XAEWDby5 +4oUAoK7qIq+qdHGm15/k1nEXJTcNHYxb +=WVWS +-----END PGP SIGNATURE----- diff --git a/THANKS b/THANKS new file mode 100644 index 0000000..4060159 --- /dev/null +++ b/THANKS @@ -0,0 +1,35 @@ +These people have helped in the development of libintl-perl: + +- Joshua Miller has extended libintl-perl to provide + the important context-sensitive functions (pgettext() and friends). + +- Christian Lackas has given various hints on + performance optimizations + +- Ingrid Gräfen has fixed a major performance + penalty on systems without POSIX::LC_MESSAGES, and she has extensively + tested the Perl backend for GNU xgettext under cygwin + +- Bruno Haible for libiconv which was the base for many conversions and + for integrating my Perl backend into GNU gettext + +Other people have helped by sending in improvements, suggestions and +bug reports (you will find out how to make the mail addresses valid): + +- DH +- Jo-Even Skarstein +- Gerhard Stoll +- Marc Brockschmidt +- Laurent Bonnaud +- Jan Kratochvil +- Светослав Агафонкин +- Michael Bell +- David Cantrell +- Karl Berry +- Patrice Dumas +- Karen Etheridge +- Slaven Rezić + +Please inform me if I have forgotten your contribution. + +Guido Flohr diff --git a/TODO b/TODO new file mode 100644 index 0000000..ad7e773 --- /dev/null +++ b/TODO @@ -0,0 +1,22 @@ +- web_set_locale returns the language and the country for lang/country + combinations (eg. de-AT) in the language field. Correct? + +- add conversion modules for other Unicode encodings than UTF-8 + (UTF-16, UCS-*) + +- Better support for Windows, the locale detection stuff does not + really work there. Any help would be appreciated. + +- Check whether other locale categories than LC_MESSAGES work. + +- Avoid call to __load_domain in Locale::gettext_pp, use a cache table + first + +- The pure Perl version of gettext will always look for message catalogs + in /usr/share/locale/{LANGUAGE}/LC_MESSAGES after the directory + specified by bindtextdomain(). This can lead to undesired results. + But I think the C version from libintl does the same, correct? + +- Allow to dynamically expand the list of supported conversions + +- Allow to dynamically restrict the list of suppported conversions diff --git a/gettext_xs/Makefile.PL b/gettext_xs/Makefile.PL new file mode 100644 index 0000000..6cad710 --- /dev/null +++ b/gettext_xs/Makefile.PL @@ -0,0 +1,56 @@ +#! /usr/local/bin/perl -w # -*- perl -*- + +# vim: tabstop=4 + +# Makefile generator for libintl-perl. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. + +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, +# USA.use ExtUtils::MakeMaker; + +use 5.004; +use ExtUtils::MakeMaker; + +#$ExtUtils::MakeMaker::Verbose = 2; +#@ExtUtils::MakeMaker::Parent = (); + +WriteMakefile ( + NAME => 'Locale::gettext_xs', + VERSION_FROM => '../lib/Locale/Messages.pm', + ($] >= 5.005 ? + (ABSTRACT => 'XS Interface to Uniforum Message Translation', + AUTHOR => 'Guido Flohr ', + ) : (), + ), + PREREQ_PM => { File::Spec => 0 }, + PL_FILES => {}, + LIBS => ['-lintl -liconv'], +); + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/gettext_xs/gettext_xs.pm b/gettext_xs/gettext_xs.pm new file mode 100644 index 0000000..3a4a860 --- /dev/null +++ b/gettext_xs/gettext_xs.pm @@ -0,0 +1,199 @@ +#! /bin/false + +# vim: tabstop=4 + +# Perl XS implementation of Uniforum message translation. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::gettext_xs; + +require DynaLoader; +require Exporter; + +use vars qw (%EXPORT_TAGS @EXPORT_OK @ISA); + +%EXPORT_TAGS = (locale_h => [ qw ( + gettext + dgettext + dcgettext + ngettext + dngettext + dcngettext + pgettext + dpgettext + dcpgettext + npgettext + dnpgettext + dcnpgettext + textdomain + bindtextdomain + bind_textdomain_codeset + ) + ], + libintl_h => [ qw (LC_CTYPE + LC_NUMERIC + LC_TIME + LC_COLLATE + LC_MONETARY + LC_MESSAGES + LC_ALL) + ], + ); + +@EXPORT_OK = qw (gettext + dgettext + dcgettext + ngettext + dngettext + dcngettext + pgettext + dpgettext + dcpgettext + npgettext + dnpgettext + dcnpgettext + textdomain + bindtextdomain + bind_textdomain_codeset + nl_putenv + setlocale + LC_CTYPE + LC_NUMERIC + LC_TIME + LC_COLLATE + LC_MONETARY + LC_MESSAGES + LC_ALL); +@ISA = qw (Exporter DynaLoader); + +bootstrap Locale::gettext_xs; + +require File::Spec; + +# Reimplement pgettext functions +sub pgettext ($$) { + my ($msgctxt, $msgid) = @_; + + my $msg_ctxt_id = join("\004", $msgctxt, $msgid); + return Locale::gettext_xs::_pgettext_aux + ("", $msg_ctxt_id, $msgid, Locale::gettext_xs::LC_MESSAGES()); +} +sub dpgettext ($$$) { + my ($domain, $msgctxt, $msgid) = @_; + + my $msg_ctxt_id = join("\004", $msgctxt, $msgid); + return Locale::gettext_xs::_pgettext_aux + ($domain, $msg_ctxt_id, $msgid, Locale::gettext_xs::LC_MESSAGES()); +} +sub dcpgettext ($$$$) { + my ($domain, $msgctxt, $msgid, $category) = @_; + + my $msg_ctxt_id = join("\004", $msgctxt, $msgid); + return Locale::gettext_xs::_pgettext_aux + ($domain, $msg_ctxt_id, $msgid, $category); +} + +# Reimplement npgettext functions +sub npgettext ($$$$) { + my ($msgctxt, $msgid1, $msgid2, $n) = @_; + + my $msg_ctxt_id = join("\004", $msgctxt, $msgid1); + return Locale::gettext_xs::_npgettext_aux + ("", $msg_ctxt_id, $msgid1, $msgid2, $n, Locale::gettext_xs::LC_MESSAGES()); +} +sub dnpgettext ($$$$$) { + my ($domain, $msgctxt, $msgid1, $msgid2, $n) = @_; + + my $msg_ctxt_id = join("\004", $msgctxt, $msgid1); + return Locale::gettext_xs::_npgettext_aux + ($domain, $msg_ctxt_id, $msgid1, $msgid2, $n, Locale::gettext_xs::LC_MESSAGES()); +} +sub dcnpgettext ($$$$$$) { + my ($domain, $msgctxt, $msgid1, $msgid2, $n, $category) = @_; + + my $msg_ctxt_id = join("\004", $msgctxt, $msgid1); + return Locale::gettext_xs::_npgettext_aux + ($domain, $msg_ctxt_id, $msgid1, $msgid2, $n, $category); +} + +# Wrapper function that converts Perl paths to OS paths. +sub bindtextdomain ($;$) { + my ($domain, $directory) = @_; + + if (defined $domain && length $domain && + defined $directory && length $directory) { + return Locale::gettext_xs::_bindtextdomain + ($domain, File::Spec->catdir ($directory)); + } else { + return &Locale::gettext_xs::_bindtextdomain; + } +} + +# In the XS version, making the prototype optional, does not work. +sub textdomain (;$) { + my $domain = shift; + + if (defined $domain) { + return Locale::gettext_xs::_textdomain ($domain); + } else { + return Locale::gettext_xs::_textdomain (""); + } +} + +sub nl_putenv ($) { + my ($envspec) = @_; + + return unless defined $envspec; + return unless length $envspec; + return if substr ($envspec, 0, 1) eq '='; + + my ($var, $value) = split /=/, $envspec, 2; + + if ($^O eq 'MSWin32') { + $value = '' unless defined $value; + return unless Locale::gettext_xs::_nl_putenv ("$var=$value") == 0; + if (length $value) { + $ENV{$var} = $value; + } else { + delete $ENV{$var}; + } + } else { + if (defined $value) { + $ENV{$var} = $value; + } else { + delete $ENV{$var}; + } + } + + return 1; +} + +1; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +tab-width: 4 +End: + diff --git a/gettext_xs/gettext_xs.xs b/gettext_xs/gettext_xs.xs new file mode 100644 index 0000000..b1e6453 --- /dev/null +++ b/gettext_xs/gettext_xs.xs @@ -0,0 +1,289 @@ +/* -*- C -*- */ +/* +# Perl binding for Uniforum message translation. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . */ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#include +#include +#include +/* Handle the case that we link against GNU libintl but include a non + * GNU libintl.h. */ +#ifndef __USE_GNU_GETTEXT +# error " is not GNU gettext. Maybe you have to adjust your include path." +#endif + +MODULE = Locale::gettext_xs PACKAGE = Locale::gettext_xs + +PROTOTYPES: ENABLE + +char* +__gettext_xs_version () + CODE: + RETVAL = (VERSION); + OUTPUT: + RETVAL + +double +LC_CTYPE () + CODE: + RETVAL = (double) LC_CTYPE; + OUTPUT: + RETVAL + +double +LC_NUMERIC () + CODE: + RETVAL = (double) LC_NUMERIC; + OUTPUT: + RETVAL + +double +LC_TIME () + CODE: + RETVAL = (double) LC_TIME; + OUTPUT: + RETVAL + +double +LC_COLLATE () + CODE: + RETVAL = (double) LC_COLLATE; + OUTPUT: + RETVAL + +double +LC_MONETARY () + CODE: + RETVAL = (double) LC_MONETARY; + OUTPUT: + RETVAL + +double +LC_MESSAGES () + CODE: + RETVAL = (double) LC_MESSAGES; + OUTPUT: + RETVAL + +double +LC_ALL () + CODE: + RETVAL = (double) LC_ALL; + OUTPUT: + RETVAL + +char* +gettext (msgid) + char* msgid + PROTOTYPE: $ + CODE: + RETVAL = (char*) gettext (msgid); + OUTPUT: + RETVAL + +char* +dgettext (domainname, msgid) + char* domainname + char* msgid + PROTOTYPE: $$ + CODE: + RETVAL = (char*) dgettext (domainname, msgid); + OUTPUT: + RETVAL + +char* +dcgettext (domainname, msgid, category) + char* domainname + char* msgid + int category + PROTOTYPE: $$$ + CODE: + RETVAL = (char*) dcgettext (domainname, msgid, category); + OUTPUT: + RETVAL + +char* +ngettext (msgid1, msgid2, n) + char* msgid1 + char* msgid2 + unsigned long n + PROTOTYPE: $$$ + CODE: + RETVAL = (char*) ngettext (msgid1, msgid2, n); + OUTPUT: + RETVAL + +char* +dngettext (domainname, msgid1, msgid2, n) + char* domainname + char* msgid1 + char* msgid2 + unsigned long n + PROTOTYPE: $$$$ + CODE: + RETVAL = (char*) dngettext (domainname, msgid1, msgid2, n); + OUTPUT: + RETVAL + +char* +dcngettext (domainname, msgid1, msgid2, n, category) + char* domainname + char* msgid1 + char* msgid2 + unsigned long n + int category + PROTOTYPE: $$$$$ + CODE: + RETVAL = (char*) dcngettext (domainname, msgid1, msgid2, n, category); + OUTPUT: + RETVAL + +char* +_pgettext_aux (domain, msg_ctxt_id, msgid, category) + char* domain + char* msg_ctxt_id + char* msgid + int category + PROTOTYPE: $$$$ + PREINIT: + char* translation; + CODE: + /* Treat empty or undefined strings as NULL. */ + if (!domain || domain[0] == '\000') + domain = NULL; + /* Treat -1 as null, and default to LC_MESSAGES */ + if (category == -1) + category = LC_MESSAGES; + /* reimplemented from gettext-0.17 */ + translation = (char*) dcgettext (domain, msg_ctxt_id, category); + if (translation == msg_ctxt_id) + RETVAL = msgid; + else + RETVAL = translation; + OUTPUT: + RETVAL + +char* +_npgettext_aux (domain, msg_ctxt_id, msgid1, msgid2, n, category) + char* domain + char* msg_ctxt_id + char* msgid1 + char* msgid2 + unsigned long n + int category + PROTOTYPE: $$$$$$ + PREINIT: + char* translation; + CODE: + /* Treat empty or undefined strings as NULL. */ + if (!domain || domain[0] == '\000') + domain = NULL; + /* Treat -1 as null, and default to LC_MESSAGES */ + if (category == -1) + category = LC_MESSAGES; + translation = (char*) dcngettext (domain, msg_ctxt_id, msgid2, n, category); + if (translation == msg_ctxt_id || translation == msgid2) + RETVAL = (n == 1 ? msgid1 : msgid2); + else + RETVAL = translation; + OUTPUT: + RETVAL + +# FIXME: The prototype should actually be ';$' but it doesn't work +# as expected. Passing no argument results in an error. +char* +_textdomain (domain) + char* domain + PROTOTYPE: $ + CODE: + /* Treat empty or undefined strings as NULL. */ + if (!domain || domain[0] == '\000') + domain = NULL; + RETVAL = (char*) textdomain (domain); + if (!RETVAL || RETVAL[0] == '\000') { + XSRETURN_UNDEF; + } + OUTPUT: + RETVAL + +# This function is a no-op except for MS-DOS with its completely +# brain-damaged environment interface. +int +_nl_putenv (str) + char* str + PROTOTYPE: $ + CODE: +#if defined (WIN32) + RETVAL = _putenv (str); +#else + RETVAL = 0; +#endif + OUTPUT: + RETVAL + +char* +_bindtextdomain (domain = NULL, dirname = NULL) + char* domain + char* dirname + PROTOTYPE: $;$ + CODE: + /* Treat empty or undefined strings as NULL. */ + if (!domain || domain[0] == '\000') + XSRETURN_UNDEF; + if (!dirname || dirname[0] == '\000') + dirname = NULL; + RETVAL = (char*) bindtextdomain (domain, dirname); + if (!RETVAL || RETVAL[0] == '\000') { + XSRETURN_UNDEF; + } + + OUTPUT: + RETVAL + + +char* +bind_textdomain_codeset (domainname, codeset) + char* domainname + char* codeset + PROTOTYPE: $;$ + CODE: + /* Treat empty or undefined strings as NULL. */ + if (!domainname || domainname[0] == '\000') + domainname = NULL; + if (!codeset || codeset[0] == '\000') + codeset = NULL; + RETVAL = (char*) bind_textdomain_codeset (domainname, codeset); + if (!RETVAL || RETVAL[0] == '\000') { + XSRETURN_UNDEF; + } + + OUTPUT: + RETVAL + +char* setlocale (category, locale = NULL) + int category + char *locale + PROTOTYPE: $;$ + CODE: + RETVAL = (char*) setlocale (category, locale); + OUTPUT: + RETVAL + + diff --git a/lib/Locale/Messages.pm b/lib/Locale/Messages.pm new file mode 100755 index 0000000..ae5a3cf --- /dev/null +++ b/lib/Locale/Messages.pm @@ -0,0 +1,1086 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::Messages; + +use strict; + +use File::Spec; + +use vars qw ($package @EXPORT_OK %EXPORT_TAGS @ISA $VERSION); + +$VERSION = '1.29'; + +# Try to load the C version first. +$package = 'gettext_xs'; + +# Do not load from current working directory. +local @INC = grep { File::Spec->file_name_is_absolute($_) } @INC; + +eval <<'EOF'; +require Locale::gettext_xs; +my $version = Locale::gettext_xs::__gettext_xs_version(); +die "Version: version mismatch ($VERSION vs. $version)" unless $version eq $VERSION; +EOF +my $no_xs = $@; + +# There are systems where setlocale() and the LC_ constants are not +# defined at all, see https://rt.cpan.org/Ticket/Display.html?id=98109 +# +# On such systems, we always fall back to gettext_dumb. +if ($no_xs) { + eval { + require POSIX; + # void + POSIX::setlocale(POSIX::LC_ALL()); + }; + if ($@) { + $package = 'gettext_dumb'; + require Locale::gettext_dumb; + } else { + $package = 'gettext_pp'; + require Locale::gettext_pp; + } +} + +require Exporter; +@ISA = qw (Exporter); +%EXPORT_TAGS = (locale_h => [ qw (gettext + dgettext + dcgettext + ngettext + dngettext + dcngettext + pgettext + dpgettext + dcpgettext + npgettext + dnpgettext + dcnpgettext + textdomain + bindtextdomain + bind_textdomain_codeset + ) + ], + libintl_h => [ qw (LC_CTYPE + LC_NUMERIC + LC_TIME + LC_COLLATE + LC_MONETARY + LC_MESSAGES + LC_ALL) + ], + ); + +@EXPORT_OK = qw (select_package + turn_utf_8_on + turn_utf_8_off + gettext + dgettext + dcgettext + ngettext + dngettext + dcngettext + pgettext + dpgettext + dcpgettext + npgettext + dnpgettext + dcnpgettext + textdomain + bindtextdomain + bind_textdomain_codeset + bind_textdomain_filter + nl_putenv + setlocale + LC_CTYPE + LC_NUMERIC + LC_TIME + LC_COLLATE + LC_MONETARY + LC_MESSAGES + LC_ALL); + +BEGIN { + my ($has_encode, $has_bytes); + + if ($] >= 5.006) { + unless (defined $has_encode) { + eval "require Encode"; + $has_encode = !$@; + } + + unless ($has_encode || defined $has_bytes) { + eval "use bytes"; + $has_bytes = !$@; + } + } + + # Turn the UTF-8 flag on or off unconditionally. The prototypes + # allow an optional second parameter, so that you can use the + # functions as callbacks to bind_textdomain_filter. + if ($has_encode) { + eval <<'EOF'; +sub turn_utf_8_on($;$) +{ + Encode::_utf8_on ($_[0]); + return $_[0]; +} + +sub turn_utf_8_off($;$) +{ + Encode::_utf8_off ($_[0]); + return $_[0]; +} + +EOF + } elsif ($has_bytes) { + eval <<'EOF'; +sub turn_utf_8_on($;$) +{ + $_[0] = pack "U0C*", unpack "C*", $_[0]; +} + +sub turn_utf_8_off($;$) +{ + use bytes; + $_[0] = join "", split //, $_[0]; +} + +EOF + } else { + eval <<'EOF'; +sub turn_utf_8_on($;$) +{ + return $_[0]; +} + +sub turn_utf_8_off($;$) +{ + return $_[0]; +} + +EOF + } +} + +# The textdomain could be undef. We avoid a warning by specifying +# a filter for the undefined textdomain. +my %filters = (undef => \&turn_utf_8_off); + +sub select_package { + my ($pkg, $compatibility) = @_; + + # Compatibility quirk for a bug pre 1.17: + if (__PACKAGE__ eq $pkg && defined $compatibility) { + $pkg = $compatibility; + } + + if ($no_xs && 'gettext_xs' eq $pkg) { + $pkg = 'gettext_pp'; + } + + if (defined $pkg && 'gettext_pp' eq $pkg) { + # This branch is not unnecessary. The next (elsif) branch does + # essentially the same but catches compilation errors. + require Locale::gettext_pp; + $package = 'gettext_pp'; + } elsif (defined $pkg) { + my $filename = "Locale::$pkg"; + $filename =~ s{::|\'}{/}; + $filename .= '.pm'; + eval { require $filename }; + $package = $pkg unless $@; + } else { + eval "require Locale::gettext_xs"; + $package = 'gettext_xs' unless $@; + } + + return $package; +} + +sub bind_textdomain_filter ($;$$) { + my ($textdomain, $coderef, $data) = @_; + + $filters{$textdomain} = [ $coderef, $data ]; + + return 1; +} + +sub textdomain (;$) { + my $function = "Locale::${package}::textdomain"; + + no strict 'refs'; + &$function; +} + +sub bindtextdomain ($;$) { + my $function = "Locale::${package}::bindtextdomain"; + + no strict 'refs'; + &$function; +} + +sub bind_textdomain_codeset ($;$) { + my $function = "Locale::${package}::bind_textdomain_codeset"; + + no strict 'refs'; + &$function; +} + +sub gettext ($) { + my $textdomain = textdomain; + $filters{$textdomain} ||= [ \&turn_utf_8_off ]; + my $cb = $filters{$textdomain}; + + my $function = "Locale::${package}::gettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub dgettext($$) { + my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ]; + + my $function = "Locale::${package}::dgettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub dcgettext($$$) { + my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ]; + + my $function = "Locale::${package}::dcgettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub ngettext($$$) { + my $textdomain = textdomain; + $filters{$textdomain} ||= [ \&turn_utf_8_off ]; + my $cb = $filters{$textdomain}; + + my $function = "Locale::${package}::ngettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub dngettext($$$$) { + my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ]; + + my $function = "Locale::${package}::dngettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub dcngettext($$$$$) { + my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ]; + + my $function = "Locale::${package}::dcngettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub pgettext($$) { + my $textdomain = textdomain; + $filters{$textdomain} ||= [ \&turn_utf_8_off ]; + my $cb = $filters{$textdomain}; + + my $function = "Locale::${package}::pgettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub dpgettext($$$) { + my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ]; + + my $function = "Locale::${package}::dpgettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub dcpgettext($$$$) { + my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ]; + + my $function = "Locale::${package}::dcpgettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub npgettext($$$$) { + my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ]; + + my $function = "Locale::${package}::npgettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub dnpgettext($$$$$) { + my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ]; + + my $function = "Locale::${package}::dnpgettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub dcnpgettext($$$$$$) { + my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ]; + + my $function = "Locale::${package}::dcnpgettext"; + + no strict 'refs'; + $cb->[0] (&$function, $cb->[1]); +} + +sub setlocale($;$) { + my $function = "Locale::${package}::setlocale"; + + no strict 'refs'; + &$function; +} + +sub nl_putenv($) { + my $function = "Locale::${package}::nl_putenv"; + + no strict 'refs'; + &$function; +} + +sub LC_NUMERIC { + my $function = "Locale::${package}::LC_NUMERIC"; + + no strict 'refs'; + &$function; +} + +sub LC_CTYPE { + my $function = "Locale::${package}::LC_CTYPE"; + + no strict 'refs'; + &$function; +} + +sub LC_TIME { + my $function = "Locale::${package}::LC_TIME"; + + no strict 'refs'; + &$function; +} + +sub LC_COLLATE { + my $function = "Locale::${package}::LC_COLLATE"; + + no strict 'refs'; + &$function; +} + +sub LC_MONETARY { + my $function = "Locale::${package}::LC_MONETARY"; + + no strict 'refs'; + &$function; +} + +sub LC_MESSAGES { + my $function = "Locale::${package}::LC_MESSAGES"; + + no strict 'refs'; + &$function; +} + +sub LC_ALL { + my $function = "Locale::${package}::LC_ALL"; + + no strict 'refs'; + &$function; +} + +1; + +__END__ + +=head1 NAME + +Locale::Messages - Gettext Like Message Retrieval + +=head1 SYNOPSIS + + use Locale::Messages qw(:locale_h :libintl_h); + + gettext $msgid; + dgettext $textdomain, $msgid; + dcgettext $textdomain, $msgid, LC_MESSAGES; + ngettext $msgid, $msgid_plural, $count; + dngettext $textdomain, $msgid, $msgid_plural, $count; + dcngettext $textdomain, $msgid, $msgid_plural, $count, LC_MESSAGES; + pgettext $msgctxt, $msgid; + dpgettext $textdomain, $msgctxt, $msgid; + dcpgettext $textdomain, $msgctxt, $msgid, LC_MESSAGES; + npgettext $msgctxt, $msgid, $msgid_plural, $count; + dnpgettext $textdomain, $msgctxt, $msgid, $msgid_plural, $count; + dcnpgettext $textdomain, $msgctxt, $msgid, $msgid_plural, $count, LC_MESSAGES; + textdomain $textdomain; + bindtextdomain $textdomain, $directory; + bind_textdomain_codeset $textdomain, $encoding; + bind_textdomain_filter $textdomain, \&filter, $data; + turn_utf_8_on ($variable); + turn_utf_8_off ($variable); + nl_putenv ('OUTPUT_CHARSET=koi8-r'); + my $category = LC_CTYPE; + my $category = LC_NUMERIC; + my $category = LC_TIME; + my $category = LC_COLLATE; + my $category = LC_MONETARY; + my $category = LC_MESSAGES; + my $category = LC_ALL; + +=head1 DESCRIPTION + +The module B is a wrapper around the interface to +message translation according to the Uniforum approach that is +for example used in GNU gettext and Sun's Solaris. It is intended +to allow Locale::Messages(3) to switch between different implementations +of the lower level libraries but this is not yet implemented. + +Normally you should not use this module directly, but the high +level interface Locale::TextDomain(3) that provides a much simpler +interface. This description is therefore deliberately kept +brief. Please refer to the GNU gettext documentation available at +L for in-depth and background +information on the topic. + +The lower level module Locale::gettext_pp(3) provides the Perl +implementation of gettext() and related functions. + +=head1 FUNCTIONS + +The module exports by default nothing. Every function has to be +imported explicitely or via an export tag (L). + +=over 4 + +=item B + +Returns the translation for B. Example: + + print gettext "Hello World!\n"; + +If no translation can be found, the unmodified B is returned, +i. e. the function can I fail, and will I mess up your +original message. + +Note for Perl 5.6 and later: The returned string will I have +the UTF-8 flag off by default. See the documentation for function +bind_textdomain_filter() for a way to change this behavior. + +One common mistake is this: + + print gettext "Hello $name!"; + +Perl will interpolate the variable C<$name> I the function +will see the string. Unless the corresponding message catalog +contains a message "Hello Tom!", "Hello Dick!" or "Hello Harry!", +no translation will be found. + +Using printf() and friends has its own problems: + + print sprintf (gettext ("This is the %s %s."), $color, $thing); + +(The example is stupid because neither color nor thing will get +translated here ...). + +In English the adjective (the color) will precede the noun, many +other languages (for example French or Italian) differ here. The +translator of the message may therefore have a hard time to find +a translation that will still work and not sound stupid in the +target language. Many C implementations of printf() allow to +change the order of the arguments, and a French translator could +then say: + + "C'est le %2$s %1$s." + +Perl printf() implements this feature as of version 5.8 or better. +Consequently you can only use it, if you are sure that your software +will run with Perl 5.8 or a later version. + +Another disadvantage of using printf() is its cryptic syntax (maybe +not for you but translators of your software may have their own +opinion). + +See the description of the function C<__x()> in Locale::TextDomain(3) +for a much better way to get around this problem. + +Non-ASCII message ids ... + +You should note that the function (and all other similar functions +in this module) does a bytewise comparison of the B for the +lookup in the translation catalog, no matter whether obscure utf-8 +flags are set on it, whether the string looks like utf-8, whether +the utf8(3pm) pragma is used, or whatever other weird method past +or future perl(1) versions invent for guessing character sets of +strings. + +Using other than us-ascii characters in Perl source code is a call +for trouble, a compatibility nightmare. Furthermore, GNU gettext +only lately introduced support for non-ascii character sets in sources, +and support for this feature may not be available everywhere. If +you absolutely want to use Bs in non-ascii character sets, +it is wise to choose utf-8. This will minimize the risk that perl(1) +itself will mess with the strings, and it will also be a guaranty +that you can later translate your project into arbitrary target +languages. + +Other character sets can theoretically work. Yet, using another +character set in the Perl source code than the one used in your +message catalogs will B work, since the lookup is done bytewise, +and all strings with non-ascii characters will not be found. + +Even if you have solved all these problems, there is still one show +stopper left: The gettext runtime API lacks a possibility to specify +the character set of the source code (including the original strings). +Consequently - in absence of a hint for the input encoding - strings +without a translation are not subject to output character set conversion. +In other words: If the (non-determinable) output character set differs +from the character set used in the source code, output can be a +mixture of two character sets. There is no point in trying to address +this problem in the pure Perl version of the gettext functions. because +breaking compatibilty between the Perl and the C version is a price too +high to pay. + +This all boils down to: Only use ASCII characters in your translatable +strings! + +=item B + +Like gettext(), but retrieves the message for the specified +B instead of the default domain. In case you wonder what +a textdomain is, you should really read on with Locale::TextDomain(3). + +=item B + +Like dgettext() but retrieves the message from the specified B +instead of the default category C. + +=item B + +Retrieves the correct translation for B items. In legacy software +you will often find something like: + + print "$count file(s) deleted.\n"; + +or + + printf "$count file%s deleted.\n", $count == 1 ? '' : 's'; + +The first example looks awkward, the second will only work in English +and languages with similar plural rules. Before ngettext() was introduced, +the best practice for internationalized programs was: + + if ($count == 1) { + print gettext "One file deleted.\n"; + } else { + printf gettext "%d files deleted.\n"; + } + +This is a nuisance for the programmer and often still not sufficient +for an adequate translation. Many languages have completely different +ideas on numerals. Some (French, Italian, ...) treat 0 and 1 alike, +others make no distinction at all (Japanese, Korean, Chinese, ...), +others have two or more plural forms (Russian, Latvian, Czech, +Polish, ...). The solution is: + + printf (ngettext ("One file deleted.\n", + "%d files deleted.\n", + $count), # argument to ngettext! + $count); # argument to printf! + +In English, or if no translation can be found, the first argument +(B) is picked if C<$count> is one, the second one otherwise. +For other languages, the correct plural form (of 1, 2, 3, 4, ...) +is automatically picked, too. You don't have to know anything about +the plural rules in the target language, ngettext() will take care +of that. + +This is most of the time sufficient but you will have to prove your +creativity in cases like + + printf "%d file(s) deleted, and %d file(s) created.\n"; + +=item B + +Like ngettext() but retrieves the translation from the specified +textdomain instead of the default domain. + +=item B + +Like dngettext() but retrieves the translation from the specified +category, instead of the default category C. + +=item B + +Returns the translation of MSGID, given the context of MSGCTXT. + +Both items are used as a unique key into the message catalog. + +This allows the translator to have two entries for words that may +translate to different foreign words based on their context. For +example, the word "View" may be a noun or a verb, which may be +used in a menu as File->View or View->Source. + + pgettext "Verb: To View", "View\n"; + pgettext "Noun: A View", "View\n"; + +The above will both lookup different entries in the message catalog. + +A typical usage are GUI programs. Imagine a program with a main +menu and the notorious "Open" entry in the "File" menu. Now imagine, +there is another menu entry Preferences->Advanced->Policy where you have +a choice between the alternatives "Open" and "Closed". In English, "Open" +is the adequate text at both places. In other languages, it is very +likely that you need two different translations. Therefore, you would +now write: + + pgettext "File|", "Open"; + pgettext "Preferences|Advanced|Policy", "Open"; + +In English, or if no translation can be found, the second argument +(MSGID) is returned. + +The function was introduced with libintl-perl version 1.17. + +=item B + +Like pgettext(), but retrieves the message for the specified +B instead of the default domain. + +The function was introduced with libintl-perl version 1.17. + +=item B + +Like dpgettext() but retrieves the message from the specified B +instead of the default category C. + +The function was introduced with libintl-perl version 1.17. + +=item B + +Like ngettext() with the addition of context as in pgettext(). + +In English, or if no translation can be found, the second argument +(MSGID) is picked if $count is one, the third one otherwise. + +The function was introduced with libintl-perl version 1.17. + +=item B + +Like npgettext() but retrieves the translation from the specified +textdomain instead of the default domain. + +The function was introduced with libintl-perl version 1.17. + +=item B + +Like dnpgettext() but retrieves the translation from the specified +category, instead of the default category C. + +The function was introduced with libintl-perl version 1.17. + +=item B + +Sets the default textdomain (initially 'messages'). + +=item B + +Binds B to B. Huh? An example: + + bindtextdomain "my-package", "./mylocale"; + +Say, the selected locale (actually the selected locale for category +C) of the program is 'fr_CH', then the message catalog +will be expected in F<./mylocale/fr_CH/LC_MESSAGES/my-package.mo>. + +=item B + +Sets the output encoding for B to B. + +=item B + +=item B + +By default, Locale::Messages will turn the utf-8 flag of all returned +messages off. If you want to change this behavior, you can pass +a reference to a subroutine that does different things - for example +turn the utf-8 flag on, or leave it untouched. The callback function +will be called with B as the first, and the possibly +translated string as the second argument. It should return the +possibly modified string. + +If you want an object method to be called, pass the object itself +in the data parameter and write a wrapper function. Example: + + sub wrapper { + my ($string, $obj) = @_; + + $obj->filterMethod ($string); + } + my $obj = MyPackage->new; + + bind_textdomain_filter ('mydomain', \&wrapper, $obj); + +The function cannot fail and always returns a true value. + +B If you use the function for setting the utf-8 flag, +it is B responsability to ensure that the output is really +utf-8. You should only use it, if you have set the environment +variable B to "utf-8". Additionally you should +call bind_textdomain_codeset() with "utf-8" as the second +argument. + +Steven Haryanto has written a module Locale::TextDomain::UTF8(3pm) +that addresses the same problem. + +This function has been introduced in libintl-perl 1.16 and it is +B part of the standard gettext API. + +=item B + +Returns VARIABLE but with the UTF-8 flag (only known in Perl >=5.6) +guaranteed to be turned on. This function does not really fit into +the module, but it is often handy nevertheless. + +The flag does B mean that the string is in fact valid utf-8! + +The function was introduced with libintl-perl version 1.16. + +=item B + +Returns VARIABLE but with the UTF-8 flag (only known in Perl >=5.6) +guaranteed to be turned off. This function does not really fit into +the module, but it is often handy nevertheless. + +The function was introduced with libintl-perl version 1.07. + +=item B + +By default, B will try to load the XS version of +the gettext implementation, i. e. Locale::gettext_xs(3) and will fall +back to the pure Perl implementation Locale::gettext_pp(3). You can +override this behavior by passing the string "gettext_pp" or +"gettext_xs" to the function select_package(). Passing "gettext_pp" +here, will prefer the pure Perl implementation. + +You will normally want to use that in a BEGIN block of your main +script. + +The function was introduced with libintl-perl version 1.03 and is not +part of the standard gettext API. + +Beginning with version 1.22 you can pass other package names than "gettext_pp" +or "gettext_xs" and use a completely different backend. It is the caller's +responsability to make sure that the selected package offers the same +interface as the two standard packages. + +One package that offers that functionality is Locale::gettext_dumb(3pm). + +=item B + +Resembles the ANSI C putenv(3) function. The sole purpose of this +function is to work around some ideosyncrasies in the environment +processing of Windows systems. If you want to portably set or +unset environment variables, use this function instead of directly +manipulating C<%ENV>. + +The argument B may have three different forms. + +=over 8 + +=item B + +This would set the environment variable C to "fr_CH". + +=item B + +Normally, this will set the environment variable C to an +empty string. Under Windows, however, the environment variable will +be deleted instead (and is no longer present in C<%ENV>). Since +within libintl-perl empty environment variables are useless, consider +this usage as deprecated. + +=item B + +This will delete the environment variable B. If you are +familiar with the brain-damaged implementation of putenv(3) (resp. +_putenv()) in the so-called standard C library of MS-Windows, you +may suspect that this is an invalid argument. This is not the case! +Passing a variable name not followed by an equal sign will always +delete the variable, no matter which operating system you use. + +=back + +The function returns true for success, and false for failure. Possible +reasons for failure are an invalid syntax or - only under Windows - +failure to allocate space for the new environment entry ($! will be +set accordingly in this case). + +Why all this hassle? The 32-bit versions of MS-DOS (currently +Windows 95/98/ME/NT/2000/XP/CE/.NET) maintain two distinct blocks +of environment variables per process. Which block is considered +the "correct" environment is a compile-time option of the Perl +interpreter. Unfortunately, if you have build the XS version +Locale::gettext_xs(3) under Windows, the underlying library may use +a different environment block, and changes you make to C<%ENV> may +not be visible to the library. + +The function nl_putenv() is mostly a funny way of saying + + LANGUAGE=some_value + +but it does its best, to pass this information to the gettext +library. Under other operating systems than Windows, it only +operates on C<%ENV>, under Windows it will call the C library +function _putenv() (after doing some cleanup to its arguments), +before manipulating C<%ENV>. + +Please note, that your C<%ENV> is updated by nl_putenv() automatically. + +The function has been introduced in libintl-perl version 1.10. + +=item setlocale + +Modifies and queries program's locale, see the documentation for setlocale() +in POSIX(3pm) instead. + +On some systems, when using GNU gettext, a call from C to setlocale() is +- with the help of the C preprocessor - really a call to libintl_setlocale(), +which is in turn a wrapper around the system setlocale(3). Failure to call +libintl_setlocale() may lead to certain malfunctions. On such systems, +B will call the wrapper libintl_setlocale(). +If you want to avoid problems, you should therefore always call +the setlocale() implementation in Locale::Messages(3pm). + +See L or +L, and +L for a discussion +of the problem. + +The function has been introduced in libintl-perl version 1.24. + +=back + +=head1 CONSTANTS + +You can (maybe) get the same constants from POSIX(3); see there for +a detailed description + +=over 4 + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +This locale category was the reason that these constants from POSIX(3) +were included here. Even if it was present in your systems C include +file F, it was not provided by POSIX(3). Perl 5.8 and later +seems to export the constant if available, although it is not documented +in POSIX(3). + +Locale::Messages(3) makes an attempt to guess the value of this category for +all systems, and assumes the arbitrary value 1729 otherwise. + +=item B + +If you specify the category B as the first argument to +POSIX::setlocale(), I locale categories will be affected at once. + +=back + +=head1 EXPORT TAGS + +The module does not export anything unless explicitely requested. +You can import groups of functions via two tags: + +=over 4 + +=item B + +Imports the functions that are normally defined in the C include +file F: + +=over 8 + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=back + +=item B + +Imports the locale category constants: + +=over 8 + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=back + +=back + +=head1 OTHER EXPORTS + +=item B + +=head1 USAGE + +A complete example: + + 1: use Locale::Messages qw(:locale_h :libintl_h); + 2: use POSIX qw (setlocale); + 3: setlocale (LC_MESSAGES, ''); + 4: textdomain ('my-package'); + 5: bindtextdomain ('my-package' => '/usr/local/share/locale'); + 6: + 7: print gettext ("Hello world!\n"); + +Step by step: Line 1 imports the necessary functions and constants. +In line 3 we set the locale for category LC_MESSAGES to the default +user settings. For C programs you will often read that LC_ALL +is the best category here but this will also change the locale for +LC_NUMERIC and many programs will not work reliably after changing +that category in Perl; choose your own poison! + +In line 4 we say that all messages (translations) without an explicit +domain specification should be retrieved from the message catalog +for the domain 'my-package'. Line 5 has the effect that the message +catalog will be searched under the directory F. + +If the user has selected the locale 'fr_CH', and if the file +F +exists, and if it contains a GNU message object file with a translation +for the string "Hello world!\n", then line 7 will print the French +translation (for Switzerland CH) to STDOUT. + +The documentation for GNU gettext explains how to extract translatable +strings from your Perl files and how to create message catalogs. + +Another less portable example: If your system uses the GNU libc you +should be able to find various files with the name F, the +message catalog for the library itself. If you have found these +files under F, then you can try the following: + + use Locale::Messages qw(:locale_h :libintl_h); + use POSIX qw (setlocale); + + setlocale LC_MESSAGES, ""; + textdomain "libc"; + + # The following is actually not needed, since this is + # one of the default search directories. + bindtextdomain libc => '/usr/share/locale'; + bind_textdomain_codeset libc => 'iso-8859-1'; + + print gettext ("No such file or directory"); + +See Locale::TextDomain(3) for much simpler ways. + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::TextDomain(3pm), Locale::gettext_pp(3pm), Encode(3pm), +Locale::TextDomain::UTF8(3pm), perllocale(3pm), POSIX(3pm), perl(1), +gettext(1), gettext(3) + +=cut + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/lib/Locale/Recode.pm b/lib/Locale/Recode.pm new file mode 100644 index 0000000..d0bcbd6 --- /dev/null +++ b/lib/Locale/Recode.pm @@ -0,0 +1,365 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Portable character conversion for Perl. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::Recode; + +use strict; + +require Locale::Recode::_Conversions; + +my $loaded = {}; +my $has_encode; + +sub new +{ + my $class = ref($_[0]) || $_[0]; + shift; + my %args = @_; + + my $self = bless {}, $class; + + my ($from_codeset, $to_codeset) = @args{qw (from to)}; + + unless ($from_codeset && $to_codeset) { + require Carp; + Carp::croak (<new (from => FROM_CODESET, to => TO_CODESET); +EOF + } + + # Find a conversion path. + my $path = Locale::Recode::_Conversions->findPath ($from_codeset, + $to_codeset); + unless ($path) { + $self->{__error} = 'EINVAL'; + return $self; + } + + my @conversions = (); + foreach (@$path) { + my ($module, $from, $to) = @$_; + + unless ($loaded->{$module}) { + eval "require Locale::RecodeData::$module"; + if ($@) { + $self->{__error} = $@; + return $self; + } + + $loaded->{$module} = 1; + } + + my $module_name = "Locale::RecodeData::$module"; + my $method = 'new'; + my $object = $module_name->$method (from => $from, + to => $to); + + push @conversions, $object; + } + + $self->{__conversions} = \@conversions; + + return $self; +} + +sub resolveAlias +{ + my ($class, $alias) = @_; + + return Locale::Recode::_Conversions->resolveAlias ($alias); +} + +sub getSupported +{ + return [ Locale::Recode::_Conversions->listSupported ]; +} + +sub getCharsets +{ + my $self = shift; + my %all = map { $_ => 1 } @{&getSupported}; + + require Locale::Recode::_Aliases; + + my $conversions = Locale::Recode::_Conversions->listSupported; + foreach my $charset (keys %{Locale::Recode::_Aliases::ALIASES()}) { + my $mime_name = $self->resolveAlias ($charset); + next unless exists $all{$mime_name}; + $all{$charset} = 1; + } + + return [ keys %all ]; +} + +sub recode +{ + my $self = $_[0]; + + return if $self->{__error}; + + return 1 unless defined $_[1]; + + my $chain = $self->{__conversions}; + + foreach my $module (@$chain) { + my $success = $module->_recode ($_[1]); + + unless ($success) { + $self->{__error} = $module->_getError; + return; + } + } + + return 1; +} + +sub getError +{ + my $self = shift; + my $error = $self->{__error} or return; + + if ('EINVAL' eq $error) { + return 'Invalid conversion'; + } else { + return $error; + } +} + +1; + +__END__ + +=head1 NAME + +Locale::Recode - Object-Oriented Portable Charset Conversion + +=head1 SYNOPSIS + + use Locale::Recode; + + $cd = Locale::Recode->new (from => 'UTF-8', + to => 'ISO-8859-1'); + + die $cd->getError if $cd->getError; + + $cd->recode ($text) or die $cd->getError; + + $mime_name = Locale::Recode->resolveAlias ('latin-1'); + + $supported = Locale::Recode->getSupported; + + $complete = Locale::Recode->getCharsets; + +=head1 DESCRIPTION + +This module provides routines that convert textual data from one +codeset to another in a portable way. The module has been started +before Encode(3) was written. It's main purpose today is to provide +charset conversion even when Encode(3) is not available on the system. +It should also work for older Perl versions without Unicode support. + +Internally Locale::Recode(3) will use Encode(3) whenever possible, +to allow for a faster conversion and for a wider range of supported +charsets, and will only fall back to the Perl implementation when +Encode(3) is not available or does not support a particular charset +that Locale::Recode(3) does. + +Locale::Recode(3) is part of libintl-perl, and it's main purpose is +actually to implement a portable charset conversion framework for +the message translation facilities described in Locale::TextDomain(3). + +=head1 CONSTRUCTOR + +The constructor C requires two named arguments: + +=over 4 + +=item B + +The encoding of the original data. Case doesn't matter, aliases +are resolved. + +=item B + +The target encoding. Again, case doesn't matter, and aliases +are resolved. + +=back + +The constructor will never fail. In case of an error, the object's +internal state is set to bad and it will refuse to do any conversions. +You can inquire the reason for the failure with the method +getError(). + +=head1 OBJECT METHODS + +The following object methods are available. + +=over 4 + +=item B + +Converts B from the source encoding into the destination +encoding. In case of success, a truth value is returned, false +otherwise. You can inquire the reason for the failure with the +method getError(). + +=item B + +Returns either false if the object is not in an error state or +an error message. + +=back + +=head1 CLASS METHODS + +The object provides some additional class methods: + +=over 4 + +=item B + +Returns a reference to a list of all supported charsets. This +may implicitely load additional Encode(3) conversions like +Encode::HanExtra(3) which may produce considerable load on your +system. + +The method is therefore not intended for regular use but rather +for getting resp. displaying I a list of available encodings. + +The members of the list are all converted to uppercase! + +=item B + +Like getSupported() but also returns all available aliases. + +=back + +=head1 SUPPORTED CHARSETS + +The range of supported charsets is system-dependent. The following +somewhat special charsets are always available: + +=over 4 + +=item B + +UTF-8 is available independently of your Perl version. For Perl 5.6 +or better or in the presence of Encode(3), conversions are not done +in Perl but with the interfaces provided by these facilities which +are written in C, hence much faster. + +Encoding data I UTF-8 is fast, even if it is done in Perl. +Decoding it in Perl may become quite slow. If you frequently have +to decode UTF-8 with B you will probably want to +make sure that you do that with Perl 5.6 or beter, or install Encode(3) to +speed up things. + +=item B + +UTF-8 is fast to write but hard to read for applications. It is +therefore not the worst for internal string representation but not +far from that. Locale::Recode(3) stores strings internally as a +reference to an array of integer values like most programming languages +(Perl is an exception) do, trading memory for performance. + +The integer values are the UCS-4 codes of the characters in host +byte order. + +The encoding B is directly availabe via Locale::Recode(3) +but of course you should not really use it for data exchange, unless +you know what you are doing. + +=back + +Locale::Recode(3) has native support for a plethora of other encodings, +most of them 8 bit encodings that are fast to decode, including most +encodings used on popular micros like the ISO-8859-* series of encodings, +most Windows-* encodings (also known as CP*), Macintosh, Atari, etc. + +=head1 NAMES AND ALIASES + +Each charset resp. encoding is available internally under a unique +name. Whenever the information was available, the preferred MIME name +(see L) was chosen as +the internal name. + +Alias handling is quite strict. The module does not make wild guesses +at what you mean ("What's the meaning of the acronym JIS" is a valid +alias for "7bit-jis" in Encode(3) ....) but aims at providing common +aliases only. The same applies to so-called aliases that are really +mistakes, like "utf8" for UTF-8. + +The module knows all aliases that are listed with the IANA character +set registry (L), plus +those known to libiconv version 1.8, and a bunch of additional ones. + +=head1 CONVERSION TABLES + +The conversion tables have either been taken from official sources +like the IANA or the Unicode Consortium, from Bruno Haible's libiconv, +or from the sources of the GNU libc and the regression tests for +libintl-perl will check for conformance here. For some encodings this data +differs from Encode(3)'s data which would cause these tests to fail. +In these cases, the module will not invoke the Encode(3) methods, but +will fall back to the internal implementation for the sake of +consistency. + +The few encodings that are affected are so simple that you will not +experience any real performance penalty unless you convert large chunks +of data. But the package is not really intended for such use anyway, and +since Encode(3) is relatively new, I rather think that the differences +are bugs in Encode which will be fixed soon. + +=head1 BUGS + +The module should provide fall back conversions for other Unicode +encoding schemes like UCS-2, UCS-4 (big- and little-endian). + +The pure Perl UTF-8 decoder will not always handle corrupt UTF-8 +correctly, especially at the end and at the beginning of the string. +This is not likely to be fixed, since the module's intention is not +to be a consistency checker for UTF-8 data. + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Encode(3), iconv(3), iconv(1), recode(1), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/Recode/_Aliases.pm b/lib/Locale/Recode/_Aliases.pm new file mode 100644 index 0000000..a63c408 --- /dev/null +++ b/lib/Locale/Recode/_Aliases.pm @@ -0,0 +1,744 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Internally known aliases for charsets. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::Recode::_Aliases; + +use constant ALIASES => { + '1047' => 'IBM1047', + '437' => 'IBM437', + '850' => 'IBM850', + '851' => 'IBM851', + '852' => 'IBM852', + '855' => 'IBM855', + '857' => 'IBM857', + '860' => 'IBM860', + '861' => 'IBM861', + '862' => 'IBM862', + '863' => 'IBM863', + '865' => 'IBM865', + '866' => 'IBM866', + '869' => 'IBM869', + '904' => 'IBM904', + 'ANSI_X3.4-1968' => 'US-ASCII', + 'ANSI_X3.4-1986' => 'US-ASCII', + 'ARABIC' => 'ISO-8859-6', + 'ARABIC7' => 'ASMO_449', + 'ASCII' => 'US-ASCII', + 'ASMO-708' => 'ISO-8859-6', + 'ATARIST' => 'ATARI-ST', + 'ATARIST-EURO' => 'ATARI-ST-EURO', + 'BIG-5' => 'BIG5', + 'BIG-FIVE' => 'BIG5', + 'BIG5-ETEN' => 'BIG5', + 'BIG5HKSCS' => 'BIG5-HKSCS', + 'BIGFIVE' => 'BIG5', + 'CA' => 'CSA_Z243.4-1985-1', + 'CCSID00924' => 'IBM00924', + 'CCSID01140' => 'IBM01140', + 'CCSID01141' => 'IBM01141', + 'CCSID01142' => 'IBM01142', + 'CCSID01143' => 'IBM01143', + 'CCSID01144' => 'IBM01144', + 'CCSID01145' => 'IBM01145', + 'CCSID01146' => 'IBM01146', + 'CCSID01147' => 'IBM01147', + 'CCSID01148' => 'IBM01148', + 'CCSID01149' => 'IBM01149', + 'CHINESE' => 'GB_2312-80', + 'CN' => 'GB_1988-80', + 'CN-BIG5' => 'BIG5', + 'CP-AR' => 'IBM868', + 'CP-GR' => 'IBM869', + 'CP-HU' => 'CWI', + 'CP-IS' => 'IBM861', + 'CP00924' => 'IBM00924', + 'CP01140' => 'IBM01140', + 'CP01141' => 'IBM01141', + 'CP01142' => 'IBM01142', + 'CP01143' => 'IBM01143', + 'CP01144' => 'IBM01144', + 'CP01145' => 'IBM01145', + 'CP01146' => 'IBM01146', + 'CP01147' => 'IBM01147', + 'CP01148' => 'IBM01148', + 'CP01149' => 'IBM01149', + 'CP037' => 'IBM037', + 'CP038' => 'IBM038', + 'CP1004' => 'IBM1004', + 'CP1026' => 'IBM1026', + 'CP1047' => 'IBM1047', + 'CP1250' => 'WINDOWS-1250', + 'CP1251' => 'WINDOWS-1251', + 'CP1252' => 'WINDOWS-1252', + 'CP1253' => 'WINDOWS-1253', + 'CP1254' => 'WINDOWS-1254', + 'CP1255' => 'WINDOWS-1255', + 'CP1256' => 'WINDOWS-1256', + 'CP1257' => 'WINDOWS-1257', + 'CP1258' => 'WINDOWS-1258', + 'CP154' => 'PTCP154', + 'CP273' => 'IBM273', + 'CP274' => 'IBM274', + 'CP275' => 'IBM275', + 'CP278' => 'IBM278', + 'CP280' => 'IBM280', + 'CP281' => 'IBM281', + 'CP284' => 'IBM284', + 'CP285' => 'IBM285', + 'CP290' => 'IBM290', + 'CP297' => 'IBM297', + 'CP367' => 'US-ASCII', + 'CP420' => 'IBM420', + 'CP423' => 'IBM423', + 'CP424' => 'IBM424', + 'CP437' => 'IBM437', + 'CP500' => 'IBM500', + 'CP775' => 'IBM775', + 'CP819' => 'ISO-8859-1', + 'CP850' => 'IBM850', + 'CP851' => 'IBM851', + 'CP852' => 'IBM852', + 'CP855' => 'IBM855', + 'CP857' => 'IBM857', + 'CP860' => 'IBM860', + 'CP861' => 'IBM861', + 'CP862' => 'IBM862', + 'CP863' => 'IBM863', + 'CP864' => 'IBM864', + 'CP865' => 'IBM865', + 'CP866' => 'IBM866', + 'CP868' => 'IBM868', + 'CP869' => 'IBM869', + 'CP870' => 'IBM870', + 'CP871' => 'IBM871', + 'CP874' => 'IBM874', + 'CP875' => 'IBM875', + 'CP880' => 'IBM880', + 'CP891' => 'IBM891', + 'CP903' => 'IBM903', + 'CP904' => 'IBM904', + 'CP905' => 'IBM905', + 'CP918' => 'IBM918', + 'CP936' => 'GBK', + 'CSA7-1' => 'CSA_Z243.4-1985-1', + 'CSA7-2' => 'CSA_Z243.4-1985-2', + 'CSADOBESTANDARDENCODING' => 'ADOBE-STANDARD-ENCODING', + 'CSASCII' => 'US-ASCII', + 'CSA_T500-1983' => 'ANSI_X3.110-1983', + 'CSBIG5' => 'BIG5', + 'CSBOCU-1' => 'BOCU-1', + 'CSCESU-8' => 'CESU-8', + 'CSDECMCS' => 'DEC-MCS', + 'CSDKUS' => 'DK-US', + 'CSEBCDICATDEA' => 'EBCDIC-AT-DE-A', + 'CSEBCDICCAFR' => 'EBCDIC-CA-FR', + 'CSEBCDICDKNO' => 'EBCDIC-DK-NO', + 'CSEBCDICDKNOA' => 'EBCDIC-DK-NO-A', + 'CSEBCDICES' => 'EBCDIC-ES', + 'CSEBCDICESA' => 'EBCDIC-ES-A', + 'CSEBCDICESS' => 'EBCDIC-ES-S', + 'CSEBCDICFISE' => 'EBCDIC-FI-SE', + 'CSEBCDICFISEA' => 'EBCDIC-FI-SE-A', + 'CSEBCDICFR' => 'EBCDIC-FR', + 'CSEBCDICIT' => 'EBCDIC-IT', + 'CSEBCDICPT' => 'EBCDIC-PT', + 'CSEBCDICUK' => 'EBCDIC-UK', + 'CSEBCDICUS' => 'EBCDIC-US', + 'CSEUCFIXWIDJAPANESE' => 'EXTENDED_UNIX_CODE_FIXED_WIDTH_FOR_JAPANESE', + 'CSEUCKR' => 'EUC-KR', + 'CSEUCPKDFMTJAPANESE' => 'EUC-JP', + 'CSEUCTW' => 'EUC-TW', + 'CSGB2312' => 'GB2312', + 'CSHALFWIDTHKATAKANA' => 'JIS_X0201', + 'CSHPDESKTOP' => 'HP-DESKTOP', + 'CSHPLEGAL' => 'HP-LEGAL', + 'CSHPMATH8' => 'HP-MATH8', + 'CSHPPIFONT' => 'HP-PI-FONT', + 'CSHPPSMATH' => 'ADOBE-SYMBOL-ENCODING', + 'CSHPROMAN8' => 'HP-ROMAN8', + 'CSIBBM904' => 'IBM904', + 'CSIBM037' => 'IBM037', + 'CSIBM038' => 'IBM038', + 'CSIBM1026' => 'IBM1026', + 'CSIBM273' => 'IBM273', + 'CSIBM274' => 'IBM274', + 'CSIBM275' => 'IBM275', + 'CSIBM277' => 'IBM277', + 'CSIBM278' => 'IBM278', + 'CSIBM280' => 'IBM280', + 'CSIBM281' => 'IBM281', + 'CSIBM284' => 'IBM284', + 'CSIBM285' => 'IBM285', + 'CSIBM290' => 'IBM290', + 'CSIBM297' => 'IBM297', + 'CSIBM420' => 'IBM420', + 'CSIBM423' => 'IBM423', + 'CSIBM424' => 'IBM424', + 'CSIBM500' => 'IBM500', + 'CSIBM851' => 'IBM851', + 'CSIBM855' => 'IBM855', + 'CSIBM857' => 'IBM857', + 'CSIBM860' => 'IBM860', + 'CSIBM861' => 'IBM861', + 'CSIBM863' => 'IBM863', + 'CSIBM864' => 'IBM864', + 'CSIBM865' => 'IBM865', + 'CSIBM866' => 'IBM866', + 'CSIBM868' => 'IBM868', + 'CSIBM869' => 'IBM869', + 'CSIBM870' => 'IBM870', + 'CSIBM871' => 'IBM871', + 'CSIBM880' => 'IBM880', + 'CSIBM891' => 'IBM891', + 'CSIBM903' => 'IBM903', + 'CSIBM905' => 'IBM905', + 'CSIBM918' => 'IBM918', + 'CSIBMEBCDICATDE' => 'EBCDIC-AT-DE', + 'CSIBMSYMBOLS' => 'IBM-SYMBOLS', + 'CSIBMTHAI' => 'IBM-THAI', + 'CSINVARIANT' => 'INVARIANT', + 'CSISO102T617BIT' => 'T.61-7BIT', + 'CSISO10367BOX' => 'ISO_10367-BOX', + 'CSISO10646UTF1' => 'ISO-10646-UTF-1', + 'CSISO10SWEDISH' => 'SEN_850200_B', + 'CSISO111ECMACYRILLIC' => 'ECMA-CYRILLIC', + 'CSISO11SWEDISHFORNAMES' => 'SEN_850200_C', + 'CSISO121CANADIAN1' => 'CSA_Z243.4-1985-1', + 'CSISO122CANADIAN2' => 'CSA_Z243.4-1985-2', + 'CSISO123CSAZ24341985GR' => 'CSA_Z243.4-1985-GR', + 'CSISO128T101G2' => 'T.101-G2', + 'CSISO139CSN369103' => 'CSN_369103', + 'CSISO13JISC6220JP' => 'JIS_C6220-1969-JP', + 'CSISO141JUSIB1002' => 'JUS_I.B1.002', + 'CSISO143IECP271' => 'IEC_P27-1', + 'CSISO146SERBIAN' => 'JUS_I.B1.003-SERB', + 'CSISO147MACEDONIAN' => 'JUS_I.B1.003-MAC', + 'CSISO14JISC6220RO' => 'JIS_C6220-1969-RO', + 'CSISO150' => 'GREEK-CCITT', + 'CSISO150GREEKCCITT' => 'GREEK-CCITT', + 'CSISO151CUBA' => 'NC_NC00-10:81', + 'CSISO153GOST1976874' => 'GOST_19768-74', + 'CSISO158LAP' => 'LATIN-LAP', + 'CSISO159JISX02121990' => 'JIS_X0212-1990', + 'CSISO15ITALIAN' => 'IT', + 'CSISO16PORTUGUESE' => 'PT', + 'CSISO17SPANISH' => 'ES', + 'CSISO18GREEK7OLD' => 'GREEK7-OLD', + 'CSISO19LATINGREEK' => 'LATIN-GREEK', + 'CSISO2022JP' => 'ISO-2022-JP', + 'CSISO2022JP2' => 'ISO-2022-JP-2', + 'CSISO2022KR' => 'ISO-2022-KR', + 'CSISO2033' => 'ISO_2033-1983', + 'CSISO21GERMAN' => 'DIN_66003', + 'CSISO25FRENCH' => 'NF_Z_62-010_(1973)', + 'CSISO27LATINGREEK1' => 'LATIN-GREEK-1', + 'CSISO2INTLREFVERSION' => 'ISO_646.IRV:1983', + 'CSISO42JISC62261978' => 'JIS_C6226-1978', + 'CSISO47BSVIEWDATA' => 'BS_VIEWDATA', + 'CSISO49INIS' => 'INIS', + 'CSISO4UNITEDKINGDOM' => 'BS_4730', + 'CSISO50INIS8' => 'INIS-8', + 'CSISO51INISCYRILLIC' => 'INIS-CYRILLIC', + 'CSISO5427CYRILLIC' => 'ISO_5427', + 'CSISO5428GREEK' => 'ISO_5428:1980', + 'CSISO57GB1988' => 'GB_1988-80', + 'CSISO58GB231280' => 'GB_2312-80', + 'CSISO60DANISHNORWEGIAN' => 'NS_4551-1', + 'CSISO60NORWEGIAN1' => 'NS_4551-1', + 'CSISO61NORWEGIAN2' => 'NS_4551-2', + 'CSISO646BASIC1983' => 'ISO_646.BASIC:1983', + 'CSISO646DANISH' => 'DS_2089', + 'CSISO6937ADD' => 'ISO_6937-2-25', + 'CSISO69FRENCH' => 'NF_Z_62-010', + 'CSISO70VIDEOTEXSUPP1' => 'VIDEOTEX-SUPPL', + 'CSISO84PORTUGUESE2' => 'PT2', + 'CSISO85SPANISH2' => 'ES2', + 'CSISO86HUNGARIAN' => 'MSZ_7795.3', + 'CSISO87JISX0208' => 'JIS_C6226-1983', + 'CSISO88596E' => 'ISO-8859-6-E', + 'CSISO88596I' => 'ISO-8859-6-I', + 'CSISO88598E' => 'ISO-8859-8-E', + 'CSISO88598I' => 'ISO-8859-8-I', + 'CSISO8859SUPP' => 'ISO_8859-SUPP', + 'CSISO88GREEK7' => 'GREEK7', + 'CSISO89ASMO449' => 'ASMO_449', + 'CSISO90' => 'ISO-IR-90', + 'CSISO91JISC62291984A' => 'JIS_C6229-1984-A', + 'CSISO92JISC62991984B' => 'JIS_C6229-1984-B', + 'CSISO93JIS62291984BADD' => 'JIS_C6229-1984-B-ADD', + 'CSISO94JIS62291984HAND' => 'JIS_C6229-1984-HAND', + 'CSISO95JIS62291984HANDADD' => 'JIS_C6229-1984-HAND-ADD', + 'CSISO96JISC62291984KANA' => 'JIS_C6229-1984-KANA', + 'CSISO99NAPLPS' => 'ANSI_X3.110-1983', + 'CSISOLATIN1' => 'ISO-8859-1', + 'CSISOLATIN2' => 'ISO-8859-2', + 'CSISOLATIN3' => 'ISO-8859-3', + 'CSISOLATIN4' => 'ISO-8859-4', + 'CSISOLATIN5' => 'ISO-8859-9', + 'CSISOLATIN6' => 'ISO-8859-10', + 'CSISOLATINARABIC' => 'ISO-8859-6', + 'CSISOLATINCYRILLIC' => 'ISO-8859-5', + 'CSISOLATINGREEK' => 'ISO-8859-7', + 'CSISOLATINHEBREW' => 'ISO-8859-8', + 'CSISOTEXTCOMM' => 'ISO_6937-2-ADD', + 'CSJISENCODING' => 'JIS_ENCODING', + 'CSKOI8R' => 'KOI8-R', + 'CSKSC56011987' => 'KS_C_5601-1987', + 'CSKSC5636' => 'KSC5636', + 'CSMACINTOSH' => 'MACINTOSH', + 'CSMICROSOFTPUBLISHING' => 'MICROSOFT-PUBLISHING', + 'CSMNEM' => 'MNEM', + 'CSMNEMONIC' => 'MNEMONIC', + 'CSNATSDANO' => 'NATS-DANO', + 'CSNATSDANOADD' => 'NATS-DANO-ADD', + 'CSNATSSEFI' => 'NATS-SEFI', + 'CSNATSSEFIADD' => 'NATS-SEFI-ADD', + 'CSPC775BALTIC' => 'IBM775', + 'CSPC850MULTILINGUAL' => 'IBM850', + 'CSPC862LATINHEBREW' => 'IBM862', + 'CSPC8CODEPAGE437' => 'IBM437', + 'CSPC8DANISHNORWEGIAN' => 'PC8-DANISH-NORWEGIAN', + 'CSPC8TURKISH' => 'PC8-TURKISH', + 'CSPCP852' => 'IBM852', + 'CSPTCP154' => 'PTCP154', + 'CSSHIFTJIS' => 'SHIFT_JIS', + 'CSUCS4' => 'ISO-10646-UCS-4', + 'CSUNICODE' => 'ISO-10646-UCS-2', + 'CSUNICODE11' => 'UNICODE-1-1', + 'CSUNICODE11UTF7' => 'UNICODE-1-1-UTF-7', + 'CSUNICODEASCII' => 'ISO-10646-UCS-BASIC', + 'CSUNICODEIBM1264' => 'ISO-UNICODE-IBM-1264', + 'CSUNICODEIBM1265' => 'ISO-UNICODE-IBM-1265', + 'CSUNICODEIBM1268' => 'ISO-UNICODE-IBM-1268', + 'CSUNICODEIBM1276' => 'ISO-UNICODE-IBM-1276', + 'CSUNICODELATIN1' => 'ISO-10646-UNICODE-LATIN1', + 'CSUNKNOWN8BIT' => 'UNKNOWN-8BIT', + 'CSUSDK' => 'US-DK', + 'CSVENTURAINTERNATIONAL' => 'VENTURA-INTERNATIONAL', + 'CSVENTURAMATH' => 'VENTURA-MATH', + 'CSVENTURAUS' => 'VENTURA-US', + 'CSVIQR' => 'VIQR', + 'CSVISCII' => 'VISCII', + 'CSWINDOWS30LATIN1' => 'ISO-8859-1-WINDOWS-3.0-LATIN-1', + 'CSWINDOWS31J' => 'WINDOWS-31J', + 'CSWINDOWS31LATIN1' => 'ISO-8859-1-WINDOWS-3.1-LATIN-1', + 'CSWINDOWS31LATIN2' => 'ISO-8859-2-WINDOWS-LATIN-2', + 'CSWINDOWS31LATIN5' => 'ISO-8859-9-WINDOWS-LATIN-5', + 'CUBA' => 'NC_NC00-10:81', + 'CWI-2' => 'CWI', + 'CYRILLIC' => 'ISO-8859-5', + 'CYRILLIC-ASIAN' => 'PTCP154', + 'DE' => 'DIN_66003', + 'DEC' => 'DEC-MCS', + 'DK' => 'DS_2089', + 'DS2089' => 'DS_2089', + 'E13B' => 'ISO_2033-1983', + 'EBCDIC-BE' => 'IBM274', + 'EBCDIC-BR' => 'IBM275', + 'EBCDIC-CP-AR1' => 'IBM420', + 'EBCDIC-CP-AR2' => 'IBM918', + 'EBCDIC-CP-BE' => 'IBM500', + 'EBCDIC-CP-CA' => 'IBM037', + 'EBCDIC-CP-CH' => 'IBM500', + 'EBCDIC-CP-DK' => 'IBM277', + 'EBCDIC-CP-ES' => 'IBM284', + 'EBCDIC-CP-FI' => 'IBM278', + 'EBCDIC-CP-FR' => 'IBM297', + 'EBCDIC-CP-GB' => 'IBM285', + 'EBCDIC-CP-GR' => 'IBM423', + 'EBCDIC-CP-HE' => 'IBM424', + 'EBCDIC-CP-IS' => 'IBM871', + 'EBCDIC-CP-IT' => 'IBM280', + 'EBCDIC-CP-NL' => 'IBM037', + 'EBCDIC-CP-NO' => 'IBM277', + 'EBCDIC-CP-ROECE' => 'IBM870', + 'EBCDIC-CP-SE' => 'IBM278', + 'EBCDIC-CP-TR' => 'IBM905', + 'EBCDIC-CP-US' => 'IBM037', + 'EBCDIC-CP-WT' => 'IBM037', + 'EBCDIC-CP-YU' => 'IBM870', + 'EBCDIC-CYRILLIC' => 'IBM880', + 'EBCDIC-DE-273+EURO' => 'IBM01141', + 'EBCDIC-DK-277+EURO' => 'IBM01142', + 'EBCDIC-ES-284+EURO' => 'IBM01145', + 'EBCDIC-FI-278+EURO' => 'IBM01143', + 'EBCDIC-FR-297+EURO' => 'IBM01147', + 'EBCDIC-GB-285+EURO' => 'IBM01146', + 'EBCDIC-GREEK' => 'IBM875', + 'EBCDIC-INT' => 'IBM038', + 'EBCDIC-INT1' => 'IBM256', + 'EBCDIC-INTERNATIONAL-500+EURO' => 'IBM01148', + 'EBCDIC-IS-871+EURO' => 'IBM01149', + 'EBCDIC-IT-280+EURO' => 'IBM01144', + 'EBCDIC-JP-E' => 'IBM281', + 'EBCDIC-JP-KANA' => 'IBM290', + 'EBCDIC-LATIN9--EURO' => 'IBM00924', + 'EBCDIC-NO-277+EURO' => 'IBM01142', + 'EBCDIC-SE-278+EURO' => 'IBM01143', + 'EBCDIC-US-37+EURO' => 'IBM01140', + 'ECMA-114' => 'ISO-8859-6', + 'ECMA-118' => 'ISO-8859-7', + 'ELOT_928' => 'ISO-8859-7', + 'EUC-CN' => 'CN-GB', + 'EUCCN' => 'CN-GB', + 'EUCJP' => 'EUC-JP', + 'EUCKR' => 'EUC-KR', + 'EUCTW' => 'EUC-TW', + 'EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE' => 'EUC-JP', + 'FI' => 'SEN_850200_B', + 'FR' => 'NF_Z_62-010', + 'FRISS' => 'EBCDIC-IS-FRISS', + 'GB' => 'BS_4730', + 'GB2312' => 'CN-GB', + 'GBK' => 'CP936', + 'GREEK' => 'ISO-8859-7', + 'GREEK8' => 'ISO-8859-7', + 'HEBREW' => 'ISO-8859-8', + 'HU' => 'MSZ_7795.3', + 'HZ-GB-2312' => 'HZ', + 'IBM367' => 'US-ASCII', + 'IBM775' => 'CP775', + 'IBM819' => 'ISO-8859-1', + 'IRV' => 'ISO_646.IRV:1983', + 'ISO-10646' => 'ISO-10646-UNICODE-LATIN1', + 'ISO-CELTIC' => 'ISO-8859-14', + 'ISO-IR-10' => 'SEN_850200_B', + 'ISO-IR-100' => 'ISO-8859-1', + 'ISO-IR-101' => 'ISO-8859-2', + 'ISO-IR-102' => 'T.61-7BIT', + 'ISO-IR-109' => 'ISO-8859-3', + 'ISO-IR-11' => 'SEN_850200_C', + 'ISO-IR-110' => 'ISO-8859-4', + 'ISO-IR-111' => 'ECMA-CYRILLIC', + 'ISO-IR-121' => 'CSA_Z243.4-1985-1', + 'ISO-IR-122' => 'CSA_Z243.4-1985-2', + 'ISO-IR-123' => 'CSA_Z243.4-1985-GR', + 'ISO-IR-126' => 'ISO-8859-7', + 'ISO-IR-127' => 'ISO-8859-6', + 'ISO-IR-128' => 'T.101-G2', + 'ISO-IR-13' => 'JIS_C6220-1969-JP', + 'ISO-IR-138' => 'ISO-8859-8', + 'ISO-IR-139' => 'CSN_369103', + 'ISO-IR-14' => 'JIS_C6220-1969-RO', + 'ISO-IR-141' => 'JUS_I.B1.002', + 'ISO-IR-142' => 'ISO_6937-2-ADD', + 'ISO-IR-143' => 'IEC_P27-1', + 'ISO-IR-144' => 'ISO-8859-5', + 'ISO-IR-146' => 'JUS_I.B1.003-SERB', + 'ISO-IR-147' => 'JUS_I.B1.003-MAC', + 'ISO-IR-148' => 'ISO-8859-9', + 'ISO-IR-149' => 'KS_C_5601-1987', + 'ISO-IR-15' => 'IT', + 'ISO-IR-150' => 'GREEK-CCITT', + 'ISO-IR-151' => 'NC_NC00-10:81', + 'ISO-IR-152' => 'ISO_6937-2-25', + 'ISO-IR-153' => 'GOST_19768-74', + 'ISO-IR-154' => 'ISO_8859-SUPP', + 'ISO-IR-155' => 'ISO_10367-BOX', + 'ISO-IR-157' => 'ISO-8859-10', + 'ISO-IR-158' => 'LATIN-LAP', + 'ISO-IR-159' => 'JIS_X0212-1990', + 'ISO-IR-16' => 'PT', + 'ISO-IR-166' => 'TIS-620', + 'ISO-IR-17' => 'ES', + 'ISO-IR-179' => 'ISO-8859-13', + 'ISO-IR-18' => 'GREEK7-OLD', + 'ISO-IR-19' => 'LATIN-GREEK', + 'ISO-IR-199' => 'ISO-8859-14', + 'ISO-IR-2' => 'ISO_646.IRV:1983', + 'ISO-IR-203' => 'ISO-8859-15', + 'ISO-IR-21' => 'DIN_66003', + 'ISO-IR-226' => 'ISO-8859-16', + 'ISO-IR-25' => 'NF_Z_62-010_(1973)', + 'ISO-IR-27' => 'LATIN-GREEK-1', + 'ISO-IR-37' => 'ISO_5427', + 'ISO-IR-4' => 'BS_4730', + 'ISO-IR-42' => 'JIS_C6226-1978', + 'ISO-IR-47' => 'BS_VIEWDATA', + 'ISO-IR-49' => 'INIS', + 'ISO-IR-50' => 'INIS-8', + 'ISO-IR-51' => 'INIS-CYRILLIC', + 'ISO-IR-54' => 'ISO_5427-EXT', + 'ISO-IR-55' => 'ISO_5428', + 'ISO-IR-57' => 'GB_1988-80', + 'ISO-IR-58' => 'GB_2312-80', + 'ISO-IR-6' => 'US-ASCII', + 'ISO-IR-60' => 'NS_4551-1', + 'ISO-IR-61' => 'NS_4551-2', + 'ISO-IR-69' => 'NF_Z_62-010', + 'ISO-IR-70' => 'VIDEOTEX-SUPPL', + 'ISO-IR-79' => 'ISO-8859-13', + 'ISO-IR-8-1' => 'NATS-SEFI', + 'ISO-IR-8-2' => 'NATS-SEFI-ADD', + 'ISO-IR-84' => 'PT2', + 'ISO-IR-85' => 'ES2', + 'ISO-IR-86' => 'MSZ_7795.3', + 'ISO-IR-87' => 'JIS_C6226-1983', + 'ISO-IR-88' => 'GREEK7', + 'ISO-IR-89' => 'ASMO_449', + 'ISO-IR-9-1' => 'NATS-DANO', + 'ISO-IR-9-2' => 'NATS-DANO-ADD', + 'ISO-IR-91' => 'JIS_C6229-1984-A', + 'ISO-IR-92' => 'JIS_C6229-1984-B', + 'ISO-IR-93' => 'JIS_C6229-1984-B-ADD', + 'ISO-IR-94' => 'JIS_C6229-1984-HAND', + 'ISO-IR-95' => 'JIS_C6229-1984-HAND-ADD', + 'ISO-IR-96' => 'JIS_C6229-1984-KANA', + 'ISO-IR-98' => 'ISO_2033-1983', + 'ISO-IR-99' => 'ANSI_X3.110-1983', + 'ISO5427CYRILLIC1981' => 'ISO_5427:1981', + 'ISO646-CA' => 'CSA_Z243.4-1985-1', + 'ISO646-CA2' => 'CSA_Z243.4-1985-2', + 'ISO646-CN' => 'GB_1988-80', + 'ISO646-CU' => 'NC_NC00-10:81', + 'ISO646-DE' => 'DIN_66003', + 'ISO646-DK' => 'DS_2089', + 'ISO646-ES' => 'ES', + 'ISO646-ES2' => 'ES2', + 'ISO646-FI' => 'SEN_850200_B', + 'ISO646-FR' => 'NF_Z_62-010', + 'ISO646-FR1' => 'NF_Z_62-010_(1973)', + 'ISO646-GB' => 'BS_4730', + 'ISO646-HU' => 'MSZ_7795.3', + 'ISO646-IT' => 'IT', + 'ISO646-JP' => 'JIS_C6220-1969-RO', + 'ISO646-JP-OCR-B' => 'JIS_C6229-1984-B', + 'ISO646-KR' => 'KSC5636', + 'ISO646-NO' => 'NS_4551-1', + 'ISO646-NO2' => 'NS_4551-2', + 'ISO646-PT' => 'PT', + 'ISO646-PT2' => 'PT2', + 'ISO646-SE' => 'SEN_850200_B', + 'ISO646-SE2' => 'SEN_850200_C', + 'ISO646-US' => 'US-ASCII', + 'ISO646-YU' => 'JUS_I.B1.002', + 'ISO_5427:1981' => 'ISO_5427-EXT', + 'ISO_5428:1980' => 'ISO_5428', + 'ISO_646.IRV:1991' => 'US-ASCII', + 'ISO_8859-1' => 'ISO-8859-1', + 'ISO_8859-1:1987' => 'ISO-8859-1', + 'ISO_8859-10' => 'ISO-8859-10', + 'ISO_8859-10:1992' => 'ISO-8859-10', + 'ISO_8859-13' => 'ISO-8859-13', + 'ISO_8859-14' => 'ISO-8859-14', + 'ISO_8859-14:1998' => 'ISO-8859-14', + 'ISO_8859-15' => 'ISO-8859-15', + 'ISO_8859-15:1998' => 'ISO-8859-15', + 'ISO_8859-16' => 'ISO-8859-16', + 'ISO_8859-16:2001' => 'ISO-8859-16', + 'ISO_8859-1:1987' => 'ISO-8859-1', + 'ISO_8859-2' => 'ISO-8859-2', + 'ISO_8859-2:1987' => 'ISO-8859-2', + 'ISO_8859-3' => 'ISO-8859-3', + 'ISO_8859-3:1988' => 'ISO-8859-3', + 'ISO_8859-4' => 'ISO-8859-4', + 'ISO_8859-4:1988' => 'ISO-8859-4', + 'ISO_8859-5' => 'ISO-8859-5', + 'ISO_8859-5:1988' => 'ISO-8859-5', + 'ISO_8859-6' => 'ISO-8859-6', + 'ISO_8859-6-E' => 'ISO-8859-6-E', + 'ISO_8859-6-I' => 'ISO-8859-6-I', + 'ISO_8859-6:1987' => 'ISO-8859-6', + 'ISO_8859-7' => 'ISO-8859-7', + 'ISO_8859-7:1987' => 'ISO-8859-7', + 'ISO_8859-8' => 'ISO-8859-8', + 'ISO_8859-8-E' => 'ISO-8859-8-E', + 'ISO_8859-8-I' => 'ISO-8859-8-I', + 'ISO_8859-8:1988' => 'ISO-8859-8', + 'ISO_8859-9' => 'ISO-8859-9', + 'ISO_8859-9:1989' => 'ISO-8859-9', + 'ISO_9036' => 'ASMO_449', + 'JIS_C6220-1969' => 'JIS_C6220-1969-JP', + 'JIS_X0208-1983' => 'JIS_C6226-1983', + 'JP' => 'JIS_C6220-1969-RO', + 'JP-OCR-A' => 'JIS_C6229-1984-A', + 'JP-OCR-B' => 'JIS_C6229-1984-B', + 'JP-OCR-B-ADD' => 'JIS_C6229-1984-B-ADD', + 'JP-OCR-HAND' => 'JIS_C6229-1984-HAND', + 'JP-OCR-HAND-ADD' => 'JIS_C6229-1984-HAND-ADD', + 'JS' => 'JUS_I.B1.002', + 'KATAKANA' => 'JIS_C6220-1969-JP', + 'KOREAN' => 'KS_C_5601-1987', + 'KSC_5601' => 'KS_C_5601-1987', + 'KS_C_5601-1989' => 'KS_C_5601-1987', + 'L1' => 'ISO-8859-1', + 'L10' => 'ISO-8859-16', + 'L2' => 'ISO-8859-2', + 'L3' => 'ISO-8859-3', + 'L4' => 'ISO-8859-4', + 'L5' => 'ISO-8859-9', + 'L6' => 'ISO-8859-10', + 'L7' => 'ISO-8859-13', + 'L8' => 'ISO-8859-14', + 'LAP' => 'LATIN-LAP', + 'LATIN-9' => 'ISO-8859-15', + 'LATIN1' => 'ISO-8859-1', + 'LATIN1-2-5' => 'ISO_8859-SUPP', + 'LATIN10' => 'ISO-8859-16', + 'LATIN2' => 'ISO-8859-2', + 'LATIN3' => 'ISO-8859-3', + 'LATIN4' => 'ISO-8859-4', + 'LATIN5' => 'ISO-8859-9', + 'LATIN6' => 'ISO-8859-10', + 'LATIN7' => 'ISO-8859-13', + 'LATIN8' => 'ISO-8859-14', + 'MAC' => 'MACINTOSH', + 'MAC-ARABIC' => 'MACARABIC', + 'MAC-CENTRALEUROPE' => 'MACCENTRALEUROPE', + 'MAC-CROATIAN' => 'MACCROATIAN', + 'MAC-CYRILLIC' => 'MACCYRILLIC', + 'MAC-GREEK' => 'MACGREEK', + 'MAC-HEBREW' => 'MACHEBREW', + 'MAC-ICELAND' => 'MACICELAND', + 'MAC-ROMANIA' => 'MACROMANIA', + 'MAC-THAI' => 'MACTHAI', + 'MAC-TURKISH' => 'MACTURKISH', + 'MAC-UKRAINE' => 'MACUKRAINE', + 'MACEDONIAN' => 'JUS_I.B1.003-MAC', + 'MS-ARAB' => 'WINDOWS-1256', + 'MS-ANSI' => 'WINDOWS-1252', + 'MS-EE' => 'WINDOWS-1250', + 'MS-CYRL' => 'WINDOWS-1251', + 'MS-GREEK' => 'WINDOWS-1253', + 'MS-HEBR' => 'WINDOWS-1255', + 'MS-TURK' => 'WINDOWS-1254', + 'MS936' => 'GBK', + 'MS_KANJI' => 'SHIFT_JIS', + 'NAPLPS' => 'ANSI_X3.110-1983', + 'NO' => 'NS_4551-1', + 'NO2' => 'NS_4551-2', + 'OS2LATIN1' => 'IBM1004', + 'PT154' => 'PTCP154', + 'R8' => 'HP-ROMAN8', + 'REF' => 'ISO_646.BASIC:1983', + 'ROMAN8' => 'HP-ROMAN8', + 'SE' => 'SEN_850200_B', + 'SE2' => 'SEN_850200_C', + 'SERBIAN' => 'JUS_I.B1.003-SERB', + 'ST_SEV_358-88' => 'GOST_19768-74', + 'T.61' => 'T.61-8BIT', + 'TIS620' => 'TIS-620', + 'TIS620-0' => 'TIS-620', + 'TIS620.2529-1' => 'TIS-620', + 'TIS620.2533-0' => 'TIS-620', + 'TIS620.2533-1' => 'TIS-620', + 'UHC' => 'CP949', + 'UK' => 'BS_4730', + 'US' => 'US-ASCII', + 'VISCII1.1-1' => 'VISCII', + 'WINBALTRIM' => 'WINDOWS-1257', + 'WINDOWS-874' => 'CP874', + 'WINDOWS-936' => 'GBK', + 'WINDOWS-SAMI2' => 'WIN-SAMI-2', + 'WS2' => 'WIN-SAMI-2', + 'X0201' => 'JIS_X0201', + 'X0201-7' => 'JIS_C6220-1969-JP', + 'X0208' => 'JIS_C6226-1983', + 'X0212' => 'JIS_X0212-1990', + 'YU' => 'JUS_I.B1.002', + 'X-ATARI-ST' => 'ATARI-ST', + 'X-ATARIST' => 'ATARI-ST', + 'X-ATARI-ST-EURO' => 'ATARI-ST-EURO', + 'X-ATARIST-EURO' => 'ATARI-ST-EURO', + 'X-MAC-ARABIC' => 'MACARABIC', + 'X-MAC-CENTRALEUROPE' => 'MACCENTRALEUROPE', + 'X-MAC-CROATIAN' => 'MACCROATIAN', + 'X-MAC-CYRILLIC' => 'MACCYRILLIC', + 'X-MAC-GREEK' => 'MACGREEK', + 'X-MAC-HEBREW' => 'MACHEBREW', + 'X-MAC-ICELAND' => 'MACICELAND', + 'X-MAC-ROMANIA' => 'MACROMANIA', + 'X-MAC-THAI' => 'MACTHAI', + 'X-MAC-TURKISH' => 'MACTURKISH', + 'X-MAC-UKRAINE' => 'MACUKRAINE', + 'X-MACARABIC' => 'MACARABIC', + 'X-MACCENTRALEUROPE' => 'MACCENTRALEUROPE', + 'X-MACCROATIAN' => 'MACCROATIAN', + 'X-MACCYRILLIC' => 'MACCYRILLIC', + 'X-MACGREEK' => 'MACGREEK', + 'X-MACHEBREW' => 'MACHEBREW', + 'X-MACICELAND' => 'MACICELAND', + 'X-MACROMANIA' => 'MACROMANIA', + 'X-MACTHAI' => 'MACTHAI', + 'X-MACTURKISH' => 'MACTURKISH', + 'X-MACUKRAINE' => 'MACUKRAINE', +}; + +1; + +__END__ + +=head1 NAME + +Locale::Recode::_Aliases - Internal Charset Alias Database for libintl-perl + +=head1 SYNOPSIS + +use Locale::Recode::_Aliases + +die "This module is internal to libintl. Do not use it directly!\n"; + +=head1 DESCRIPTION + +Contains a list of codeset aliases that are known internally to +libintl. + +=head1 CONSTANTS + +=over 4 + +=item ALIASES + +The constant B contains a hash reference +the keys of which are internally known charset alias names all in +uppercase. The corresponding value is the canonical name of the charset. + +=back + +=head1 BUGS + +The format of the lookup table will most probably change, do not rely +on the current format! + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/Recode/_Conversions.pm b/lib/Locale/Recode/_Conversions.pm new file mode 100644 index 0000000..f857708 --- /dev/null +++ b/lib/Locale/Recode/_Conversions.pm @@ -0,0 +1,457 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# List of internally known conversions. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::Recode::_Conversions; + +use strict; +use integer; + +use vars qw ($conversions $optional_conversions); + +# These are the canonical names of the encodings always available. +$conversions = { + 'ASMO_449' => 'ASMO_449', + 'ATARI-ST-EURO' => 'ATARI_ST_EURO', + 'ATARI-ST' => 'ATARI_ST', + 'CP10007' => 'CP10007', + 'CSN_369103' => 'CSN_369103', + 'CWI' => 'CWI', + 'DEC-MCS' => 'DEC_MCS', + 'EBCDIC-AT-DE-A' => 'EBCDIC_AT_DE_A', + 'EBCDIC-AT-DE' => 'EBCDIC_AT_DE', + 'EBCDIC-CA-FR' => 'EBCDIC_CA_FR', + 'EBCDIC-DK-NO-A' => 'EBCDIC_DK_NO_A', + 'EBCDIC-DK-NO' => 'EBCDIC_DK_NO', + 'EBCDIC-ES-A' => 'EBCDIC_ES_A', + 'EBCDIC-ES-S' => 'EBCDIC_ES_S', + 'EBCDIC-ES' => 'EBCDIC_ES', + 'EBCDIC-FI-SE-A' => 'EBCDIC_FI_SE_A', + 'EBCDIC-FI-SE' => 'EBCDIC_FI_SE', + 'EBCDIC-FR' => 'EBCDIC_FR', + 'EBCDIC-IS-FRISS' => 'EBCDIC_IS_FRISS', + 'EBCDIC-IT' => 'EBCDIC_IT', + 'EBCDIC-PT' => 'EBCDIC_PT', + 'EBCDIC-UK' => 'EBCDIC_UK', + 'EBCDIC-US' => 'EBCDIC_US', + 'ECMA-CYRILLIC' => 'ECMA_CYRILLIC', + 'GEORGIAN-ACADEMY' => 'GEORGIAN_ACADEMY', + 'GEORGIAN-PS' => 'GEORGIAN_PS', + 'GOST_19768-74' => 'GOST_19768_74', + 'GREEK-CCITT' => 'GREEK_CCITT', + 'GREEK7-OLD' => 'GREEK7_OLD', + 'GREEK7' => 'GREEK7', + 'HP-ROMAN8' => 'HP_ROMAN8', + 'IBM037' => 'IBM037', + 'IBM038' => 'IBM038', + 'IBM1004' => 'IBM1004', + 'IBM1026' => 'IBM1026', + 'IBM1047' => 'IBM1047', + 'IBM256' => 'IBM256', + 'IBM273' => 'IBM273', + 'IBM274' => 'IBM274', + 'IBM275' => 'IBM275', + 'IBM277' => 'IBM277', + 'IBM278' => 'IBM278', + 'IBM280' => 'IBM280', + 'IBM281' => 'IBM281', + 'IBM284' => 'IBM284', + 'IBM285' => 'IBM285', + 'IBM290' => 'IBM290', + 'IBM297' => 'IBM297', + 'IBM420' => 'IBM420', + 'IBM423' => 'IBM423', + 'IBM424' => 'IBM424', + 'IBM437' => 'IBM437', + 'IBM500' => 'IBM500', + 'IBM850' => 'IBM850', + 'IBM851' => 'IBM851', + 'IBM852' => 'IBM852', + 'IBM855' => 'IBM855', + 'IBM857' => 'IBM857', + 'IBM860' => 'IBM860', + 'IBM861' => 'IBM861', + 'IBM862' => 'IBM862', + 'IBM863' => 'IBM863', + 'IBM864' => 'IBM864', + 'IBM865' => 'IBM865', + 'IBM866' => 'IBM866', + 'IBM868' => 'IBM868', + 'IBM869' => 'IBM869', + 'IBM870' => 'IBM870', + 'IBM871' => 'IBM871', + 'IBM874' => 'IBM874', + 'IBM875' => 'IBM875', + 'IBM880' => 'IBM880', + 'IBM891' => 'IBM891', + 'IBM903' => 'IBM903', + 'IBM904' => 'IBM904', + 'IBM905' => 'IBM905', + 'IBM918' => 'IBM918', + 'IEC_P27-1' => 'IEC_P27_1', + 'INIS-8' => 'INIS_8', + 'INIS-CYRILLIC' => 'INIS_CYRILLIC', + 'INIS' => 'INIS', + 'ISO-8859-1' => 'ISO_8859_1', + 'ISO-8859-10' => 'ISO_8859_10', + 'ISO-8859-11' => 'ISO_8859_11', + 'ISO-8859-13' => 'ISO_8859_13', + 'ISO-8859-14' => 'ISO_8859_14', + 'ISO-8859-15' => 'ISO_8859_15', + 'ISO-8859-16' => 'ISO_8859_16', + 'ISO-8859-2' => 'ISO_8859_2', + 'ISO-8859-3' => 'ISO_8859_3', + 'ISO-8859-4' => 'ISO_8859_4', + 'ISO-8859-5' => 'ISO_8859_5', + 'ISO-8859-6' => 'ISO_8859_6', + 'ISO-8859-7' => 'ISO_8859_7', + 'ISO-8859-8' => 'ISO_8859_8', + 'ISO-8859-9' => 'ISO_8859_9', + 'ISO_10367-BOX' => 'ISO_10367_BOX', + 'ISO_2033-1983' => 'ISO_2033_1983', + 'ISO_5427-EXT' => 'ISO_5427_EXT', + 'ISO_5427' => 'ISO_5427', + 'ISO_5428' => 'ISO_5428', + 'KOI-8' => 'KOI_8', + 'KOI8-R' => 'KOI8_R', + 'KOI8-RU' => 'KOI8_RU', + 'KOI8-T' => 'KOI8_T', + 'KOI8-U' => 'KOI8_U', + 'LATIN-GREEK-1' => 'LATIN_GREEK_1', + 'LATIN-GREEK' => 'LATIN_GREEK', + 'MACINTOSH' => 'MACINTOSH', + 'MACARABIC' => 'MACARABIC', + 'MACCYRILLIC' => 'MACCYRILLIC', + 'MACCROATIAN' => 'MACCROATIAN', + 'MACGREEK' => 'MACGREEK', + 'MACHEBREW' => 'MACHEBREW', + 'MACICELAND' => 'MACICELAND', + 'MACROMANIA' => 'MACROMANIA', + 'MACTHAI' => 'MACTHAI', + 'MACTURKISH' => 'MACTURKISH', + 'MACUKRAINE' => 'MACUKRAINE', + 'MAC-IS' => 'MAC_IS', + 'MAC-SAMI' => 'MAC_SAMI', + 'MAC-UK' => 'MAC_UK', + 'NATS-DANO' => 'NATS_DANO', + 'NATS-SEFI' => 'NATS_SEFI', + 'NEXTSTEP' => 'NEXTSTEP', + 'TIS-620' => 'TIS_620', + 'UTF-8' => 'UTF_8', + 'VISCII' => 'VISCII', + 'WIN-SAMI-2' => 'SAMI_WS2', + 'WINDOWS-1250' => 'CP1250', + 'WINDOWS-1251' => 'CP1251', + 'WINDOWS-1252' => 'CP1252', + 'WINDOWS-1253' => 'CP1253', + 'WINDOWS-1254' => 'CP1254', + 'WINDOWS-1256' => 'CP1256', + 'WINDOWS-1257' => 'CP1257', + 'US-ASCII' => 'US_ASCII', +}; + +# These encodings are maybe available via Encode(3pm). +$optional_conversions = { + 'BIG5' => undef, + 'BIG5-HKSCS' => undef, + 'CN-GB' => undef, + 'CN-GB-ISOIR165' => undef, + 'CP1006' => undef, + 'CP1026' => undef, + 'CP1047' => undef, + 'CP1361' => undef, + 'CP949' => undef, + 'CP37' => undef, + 'CP424' => undef, + 'CP500' => undef, + 'CP737' => undef, + 'CP775' => undef, + 'CP856' => undef, + 'CP874' => undef, + 'CP875' => undef, + 'CP932' => undef, + 'CP936' => undef, + 'CP950' => undef, + 'EUC-JP' => undef, + 'EUC-KR' => undef, + 'EUC-TW' => undef, + # mapping from 0xef to 0xff missing. + # 'HP-ROMAN8' => undef, + 'GB18030' => undef, + 'HZ' => undef, + 'IBM437' => undef, + 'IBM850' => undef, + 'IBM852' => undef, + 'IBM855' => undef, + 'IBM857' => undef, + 'IBM860' => undef, + 'IBM861' => undef, + 'IBM862' => undef, + 'IBM863' => undef, + 'IBM864' => undef, + 'IBM865' => undef, + 'IBM866' => undef, + 'IBM869' => undef, + 'ISO-10646-UCS-2' => undef, + 'ISO-10646-UCS-4' => undef, + 'ISO-2022-JP' => undef, + 'ISO-2022-JP-1' => undef, + 'ISO-2022-KR' => undef, + 'ISO-8859-1' => undef, + 'ISO-8859-10' => undef, + # This is broken in some versions of Encode. + # 'ISO-8859-11' => undef, + 'ISO-8859-13' => undef, + 'ISO-8859-14' => undef, + 'ISO-8859-15' => undef, + # Errors at 0xa5 and 0xab. + # 'ISO-8859-16' => undef, + 'ISO-8859-2' => undef, + 'ISO-8859-3' => undef, + 'ISO-8859-4' => undef, + 'ISO-8859-5' => undef, + # Uses arabic digits in ascii range?! + # 'ISO-8859-6' => undef, + # 0xa1 and 0xa2 are incorrectly encoded. + # 'ISO-8859-7' => undef, + # 0xfd and 0xfe are missing. + # 'ISO-8859-8' => undef, + 'ISO-8859-9' => undef, + 'ISO-IR-149' => undef, + 'KOI8-R' => undef, + # 0x95 is BULLET, not BULLET OPERATOR. + # 'KOI8-U' => undef, + # Seems to be messed up in certain Encode versions. + # 'MACINTOSH' => undef, + # TODO: Check other Mac encodings for correctness. + # Nextstep is completely broken in my version of Encode. + # 'NEXTSTEP' => undef, + 'SHIFT_JIS' => undef, + 'UCS-2BE' => undef, + 'UCS-2LE' => undef, + 'UCS-4BE' => undef, + 'UCS-4LE' => undef, + 'US-ASCII' => undef, + 'UTF-16' => undef, + 'UTF-16BE' => undef, + 'UTF-16LE' => undef, + 'UTF-32' => undef, + 'UTF-32BE' => undef, + 'UTF-32LE' => undef, + 'UTF-8' => undef, + # 0x86 is missing, 0xa6 is incorrectly encoded. + # 'VISCII' => undef, + 'WINDOWS-1250' => undef, + 'WINDOWS-1251' => undef, + 'WINDOWS-1252' => undef, + 'WINDOWS-1253' => undef, + 'WINDOWS-1254' => undef, + 'WINDOWS-1255' => undef, + 'WINDOWS-1256' => undef, + 'WINDOWS-1257' => undef, + 'WINDOWS-1258' => undef, +}; + +my $has_encode; + +sub resolveAlias +{ + my (undef, $encoding) = @_; + + $encoding = uc $encoding; + + return $encoding if exists $conversions->{$encoding}; + return $encoding if exists $optional_conversions->{$encoding}; + + require Locale::Recode::_Aliases; + + my $resolved = Locale::Recode::_Aliases::ALIASES()->{$encoding}; + + return $resolved if $resolved; + + return; +} + +sub isSupported +{ + my ($class, $encoding) = @_; + + return unless defined $encoding && length $encoding; + + $encoding = uc $encoding; + my $mimename = $class->resolveAlias ($encoding); + + return unless $mimename; + + # Determine the correct module. + if (exists $optional_conversions->{$mimename}) { + unless (defined $has_encode) { + eval "require Encode"; + $has_encode = !$@; + + if ($has_encode) { + require Encode::Alias; + + # Add missing real names. + Encode::Alias::define_alias (MS_KANJI => 'ShiftJIS'); + Encode::Alias::define_alias ('CN-GB' => 'EUC-CN'); + } + } + + if ($has_encode) { + # Now check whether Encode really supports that encoding. + eval "Encode::encode ('$mimename', 'x')"; + + unless ($@) { + $conversions->{$mimename} = '_Encode'; + } + delete $optional_conversions->{$mimename}; + } + } + + return $conversions->{$mimename} if exists $conversions->{$mimename}; + + return; +} + +sub listSupported +{ + my ($class) = @_; + + foreach my $opt (keys %$optional_conversions) { + $class->isSupported ($opt); + } + + my @list = keys %$conversions; + return @list; +} + +# Find a conversion path. +sub findPath +{ + my ($class, $from, $to) = @_; + + $from = 'INTERNAL' eq uc $from ? 'INTERNAL' : $class->resolveAlias ($from); + $to = 'INTERNAL' eq uc $to ? 'INTERNAL' : $class->resolveAlias ($to); + + return unless $from && $to; + + return [] if $from eq $to; + + my $from_module = $class->isSupported ($from); + my $to_module = $class->isSupported ($to); + + if (!$from_module) { + if ('INTERNAL' eq $from) { + $from_module = $to_module or return; + } else { + return; + } + } + + if (!$to_module) { + if ('INTERNAL' eq $to) { + $to_module = $from_module or return; + } else { + return; + } + } + + if ($from_module eq $to_module + || $to eq 'INTERNAL' + || $to eq 'UTF-8') { + return [[ $from_module, $from, $to ]]; + } elsif ($from eq 'INTERNAL') { + return [[ $to_module, $from, $to ]]; + } else { + return [[ $from_module, $from, 'INTERNAL' ], + [ $to_module, 'INTERNAL', $to ]]; + } +} + +# TODO: check for +# 7bit-jis +# AdobeStandardEncoding +# AdobeSymbol +# AdobeZdingbat +# ascii-ctrl +# big5ext +# big5plus +# cccii +# cns11643-1 +# cns11643-2 +# cns11643-3 +# cns11643-4 +# cns11643-5 +# cns11643-6 +# cns11643-7 +# cns11643-f +# dingbats +# gb12345-raw +# gb2312-raw +# gsm0338 +# jis0201-raw +# jis0208-raw +# jis0212-raw +# koi8-f +# MIME-B +# MIME-Header +# MIME-Q +# posix-bc +# symbol +# unisys + +1; + +__END__ + +=head1 NAME + +Locale::Recode::_Conversions - Internal Table of Known Conversions + +=head1 SYNOPSIS + +use Locale::Recode::_Conversions + +This module is internal to libintl. Do not use it directly! + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData.pm b/lib/Locale/RecodeData.pm new file mode 100644 index 0000000..3667d43 --- /dev/null +++ b/lib/Locale/RecodeData.pm @@ -0,0 +1,174 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Virtual base class for Locale::Recode converters. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData; + +use strict; + +sub new +{ + my ($class, %args) = @_; + + bless { + _from => $args{from}, + _to => $args{to}, + }, $class; +} + +sub _getError +{ + shift->{_error}; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData - Abstract Base Class for Charset Converters + +=head1 SYNOPSIS + + # For compatibility with Perl 5.005 and earlier, you must + # *use* the module before inheriting from it! + use qw (Locale::RecodeData); + use base qw (Locale::RecodeData); + +=head1 DESCRIPTION + +The module B serves as an abstract base class to +all converters used by Locale::Recode(3). + +Adding new conversion modules is currently not straightforward, and +you will have to edit the sources of some modules for that purpose. + +First, you have to add your new converter class to the list found +in Locale::_Conversions(3), so that Locale::Recode(3) knows about +its presence. If there are valid aliases for the codeset of your +converter, you will also have to edit Locale::_Aliases(3). + +Finally, you have to implement the (protected) conversion routine +_recode(). See below (L<"INTERFACE")> for details. + +=head1 CONSTRUCTOR + +=over 4 + +=item B FROM_CODESET, to =E TO_CODESET)> + +The constructor takes two (named) arguments: + +=over 8 + +=item B + +The canonical name of the source codeset. Aliases have already been +resolved and the name is converted to uppercase. + +=item B + +The canonical name of the destination codeset. Aliases have already been +resolved and the name is converted to uppercase. + +=back + +You normally don't have to implement the constructor. The default constructor +implemented here will store the source and destination codesets in the +protected members C<_from> and C<_to>. + +=back + +=head1 METHODS + +The class implements one method: + +=over 4 + +=item B<_getError> + +Returns the (protected) member C<_error>. + +=back + +=head1 INTERFACE + +New conversion classes must provide the following interface: + +=over 4 + +=item B FROM_CODESET, to =E TO_CODESET)> + +The constructor takes two (named) arguments: + +=over 8 + +=item B + +The canonical name of the source codeset. Aliases have already been +resolved and the name is converted to uppercase. + +=item B + +The canonical name of the destination codeset. Aliases have already been +resolved and the name is converted to uppercase. + +=back + +=item B<_getError> + +Should return the last error (as a string) or false if there was no error. + +This method is implemented in the base class already. + +=item B<_recode STRINGREF> + +Should convert the argument C in-place. In case of failure, +return false, and make provisions that the method C<_getError()> returns +an informative error message. + +=back + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::Recode::_Aliases(3pm), Locale::Recode::_Conversions(3pm), +Locale::Recode(3pm), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ASMO_449.pm b/lib/Locale/RecodeData/ASMO_449.pm new file mode 100644 index 0000000..731fe91 --- /dev/null +++ b/lib/Locale/RecodeData/ASMO_449.pm @@ -0,0 +1,870 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ASMO_449. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ASMO_449; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00a4, + 0x0025, + 0x0026, + 0x0027, + 0x0028, + 0x0029, + 0x002a, + 0x002b, + 0x060c, + 0x002d, + 0x002e, + 0x002f, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x003a, + 0x061b, + 0x003c, + 0x003d, + 0x003e, + 0x061f, + 0x0040, + 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, + 0x005b, + 0x005c, + 0x005d, + 0x005e, + 0x005f, + 0x0640, + 0x0641, + 0x0642, + 0x0643, + 0x0644, + 0x0645, + 0x0646, + 0x0647, + 0x0648, + 0x0649, + 0x064a, + 0x064b, + 0x064c, + 0x064d, + 0x064e, + 0x064f, + 0x0650, + 0x0651, + 0x0652, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007b, + 0x007c, + 0x007d, + 0x203e, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\xc2\xa4", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\xd8\x8c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\xd8\x9b", + "\x3c", + "\x3d", + "\x3e", + "\xd8\x9f", + "\x40", + "\xd8\xa1", + "\xd8\xa2", + "\xd8\xa3", + "\xd8\xa4", + "\xd8\xa5", + "\xd8\xa6", + "\xd8\xa7", + "\xd8\xa8", + "\xd8\xa9", + "\xd8\xaa", + "\xd8\xab", + "\xd8\xac", + "\xd8\xad", + "\xd8\xae", + "\xd8\xaf", + "\xd8\xb0", + "\xd8\xb1", + "\xd8\xb2", + "\xd8\xb3", + "\xd8\xb4", + "\xd8\xb5", + "\xd8\xb6", + "\xd8\xb7", + "\xd8\xb8", + "\xd8\xb9", + "\xd8\xba", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\xd9\x80", + "\xd9\x81", + "\xd9\x82", + "\xd9\x83", + "\xd9\x84", + "\xd9\x85", + "\xd9\x86", + "\xd9\x87", + "\xd9\x88", + "\xd9\x89", + "\xd9\x8a", + "\xd9\x8b", + "\xd9\x8c", + "\xd9\x8d", + "\xd9\x8e", + "\xd9\x8f", + "\xd9\x90", + "\xd9\x91", + "\xd9\x92", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7b", + "\x7c", + "\x7d", + "\xe2\x80\xbe", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x00000040 => "\x40", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007f => "\x7f", + 0x000000a4 => "\x24", + 0x0000060c => "\x2c", + 0x0000061b => "\x3b", + 0x0000061f => "\x3f", + 0x00000621 => "\x41", + 0x00000622 => "\x42", + 0x00000623 => "\x43", + 0x00000624 => "\x44", + 0x00000625 => "\x45", + 0x00000626 => "\x46", + 0x00000627 => "\x47", + 0x00000628 => "\x48", + 0x00000629 => "\x49", + 0x0000062a => "\x4a", + 0x0000062b => "\x4b", + 0x0000062c => "\x4c", + 0x0000062d => "\x4d", + 0x0000062e => "\x4e", + 0x0000062f => "\x4f", + 0x00000630 => "\x50", + 0x00000631 => "\x51", + 0x00000632 => "\x52", + 0x00000633 => "\x53", + 0x00000634 => "\x54", + 0x00000635 => "\x55", + 0x00000636 => "\x56", + 0x00000637 => "\x57", + 0x00000638 => "\x58", + 0x00000639 => "\x59", + 0x0000063a => "\x5a", + 0x00000640 => "\x60", + 0x00000641 => "\x61", + 0x00000642 => "\x62", + 0x00000643 => "\x63", + 0x00000644 => "\x64", + 0x00000645 => "\x65", + 0x00000646 => "\x66", + 0x00000647 => "\x67", + 0x00000648 => "\x68", + 0x00000649 => "\x69", + 0x0000064a => "\x6a", + 0x0000064b => "\x6b", + 0x0000064c => "\x6c", + 0x0000064d => "\x6d", + 0x0000064e => "\x6e", + 0x0000064f => "\x6f", + 0x00000650 => "\x70", + 0x00000651 => "\x71", + 0x00000652 => "\x72", + 0x0000203e => "\x7e", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ASMO_449 - Conversion routines for ASMO_449 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ASMO_449. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO_9036 + alias ARABIC7 + alias ISO-IR-89 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 000000A4 | CURRENCY SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000060C | ARABIC COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000061B | ARABIC SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000061F | ARABIC QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000621 | ARABIC LETTER HAMZA + 42 | 00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE + 43 | 00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE + 44 | 00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE + 45 | 00000625 | ARABIC LETTER ALEF WITH HAMZA BELOW + 46 | 00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE + 47 | 00000627 | ARABIC LETTER ALEF + 48 | 00000628 | ARABIC LETTER BEH + 49 | 00000629 | ARABIC LETTER TEH MARBUTA + 4A | 0000062A | ARABIC LETTER TEH + 4B | 0000062B | ARABIC LETTER THEH + 4C | 0000062C | ARABIC LETTER JEEM + 4D | 0000062D | ARABIC LETTER HAH + 4E | 0000062E | ARABIC LETTER KHAH + 4F | 0000062F | ARABIC LETTER DAL + 50 | 00000630 | ARABIC LETTER THAL + 51 | 00000631 | ARABIC LETTER REH + 52 | 00000632 | ARABIC LETTER ZAIN + 53 | 00000633 | ARABIC LETTER SEEN + 54 | 00000634 | ARABIC LETTER SHEEN + 55 | 00000635 | ARABIC LETTER SAD + 56 | 00000636 | ARABIC LETTER DAD + 57 | 00000637 | ARABIC LETTER TAH + 58 | 00000638 | ARABIC LETTER ZAH + 59 | 00000639 | ARABIC LETTER AIN + 5A | 0000063A | ARABIC LETTER GHAIN + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000640 | ARABIC TATWEEL + 61 | 00000641 | ARABIC LETTER FEH + 62 | 00000642 | ARABIC LETTER QAF + 63 | 00000643 | ARABIC LETTER KAF + 64 | 00000644 | ARABIC LETTER LAM + 65 | 00000645 | ARABIC LETTER MEEM + 66 | 00000646 | ARABIC LETTER NOON + 67 | 00000647 | ARABIC LETTER HEH + 68 | 00000648 | ARABIC LETTER WAW + 69 | 00000649 | ARABIC LETTER ALEF MAKSURA + 6A | 0000064A | ARABIC LETTER YEH + 6B | 0000064B | ARABIC FATHATAN + 6C | 0000064C | ARABIC DAMMATAN + 6D | 0000064D | ARABIC KASRATAN + 6E | 0000064E | ARABIC FATHA + 6F | 0000064F | ARABIC DAMMA + 70 | 00000650 | ARABIC KASRA + 71 | 00000651 | ARABIC SHADDA + 72 | 00000652 | ARABIC SUKUN + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000203E | OVERLINE + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ATARI_ST.pm b/lib/Locale/RecodeData/ATARI_ST.pm new file mode 100644 index 0000000..e65bc48 --- /dev/null +++ b/lib/Locale/RecodeData/ATARI_ST.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ATARI-ST. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ATARI_ST; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e5, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ef, + 0x00ee, + 0x00ec, + 0x00c4, + 0x00c5, + 0x00c9, + 0x00e6, + 0x00c6, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00fb, + 0x00f9, + 0x00ff, + 0x00d6, + 0x00dc, + 0x00a2, + 0x00a3, + 0x00a5, + 0x00df, + 0x0192, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00f1, + 0x00d1, + 0x00aa, + 0x00ba, + 0x00bf, + 0x2310, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00bb, + 0x00e3, + 0x00f5, + 0x00d8, + 0x00f8, + 0x0153, + 0x0152, + 0x00c0, + 0x00c3, + 0x00d5, + 0x00a8, + 0x00b4, + 0x2020, + 0x00b6, + 0x00a9, + 0x00ae, + 0x2122, + 0x0133, + 0x0132, + 0x05d0, + 0x05d1, + 0x05d2, + 0x05d3, + 0x05d4, + 0x05d5, + 0x05d6, + 0x05d7, + 0x05d8, + 0x05d9, + 0x05db, + 0x05dc, + 0x05de, + 0x05e0, + 0x05e1, + 0x05e2, + 0x05e4, + 0x05e6, + 0x05e7, + 0x05e8, + 0x05e9, + 0x05ea, + 0x05df, + 0x05da, + 0x05dd, + 0x05e3, + 0x05e5, + 0x00a7, + 0x2038, + 0x221e, + 0x03b1, + 0x03b2, + 0x0393, + 0x03c0, + 0x03a3, + 0x03c3, + 0x00b5, + 0x03c4, + 0x03a6, + 0x03b8, + 0x03a9, + 0x03b4, + 0x222e, + 0x03c6, + 0x2208, + 0x220f, + 0x2261, + 0x00b1, + 0x2265, + 0x2264, + 0x2320, + 0x2321, + 0x00f7, + 0x2248, + 0x00b0, + 0x2022, + 0x00b7, + 0x221a, + 0x207f, + 0x00b2, + 0x00b3, + 0x00af, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xaf", + "\xc3\xae", + "\xc3\xac", + "\xc3\x84", + "\xc3\x85", + "\xc3\x89", + "\xc3\xa6", + "\xc3\x86", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xbb", + "\xc3\xb9", + "\xc3\xbf", + "\xc3\x96", + "\xc3\x9c", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xc3\x9f", + "\xc6\x92", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xb1", + "\xc3\x91", + "\xc2\xaa", + "\xc2\xba", + "\xc2\xbf", + "\xe2\x8c\x90", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xa3", + "\xc3\xb5", + "\xc3\x98", + "\xc3\xb8", + "\xc5\x93", + "\xc5\x92", + "\xc3\x80", + "\xc3\x83", + "\xc3\x95", + "\xc2\xa8", + "\xc2\xb4", + "\xe2\x80\xa0", + "\xc2\xb6", + "\xc2\xa9", + "\xc2\xae", + "\xe2\x84\xa2", + "\xc4\xb3", + "\xc4\xb2", + "\xd7\x90", + "\xd7\x91", + "\xd7\x92", + "\xd7\x93", + "\xd7\x94", + "\xd7\x95", + "\xd7\x96", + "\xd7\x97", + "\xd7\x98", + "\xd7\x99", + "\xd7\x9b", + "\xd7\x9c", + "\xd7\x9e", + "\xd7\xa0", + "\xd7\xa1", + "\xd7\xa2", + "\xd7\xa4", + "\xd7\xa6", + "\xd7\xa7", + "\xd7\xa8", + "\xd7\xa9", + "\xd7\xaa", + "\xd7\x9f", + "\xd7\x9a", + "\xd7\x9d", + "\xd7\xa3", + "\xd7\xa5", + "\xc2\xa7", + "\xe2\x80\xb8", + "\xe2\x88\x9e", + "\xce\xb1", + "\xce\xb2", + "\xce\x93", + "\xcf\x80", + "\xce\xa3", + "\xcf\x83", + "\xc2\xb5", + "\xcf\x84", + "\xce\xa6", + "\xce\xb8", + "\xce\xa9", + "\xce\xb4", + "\xe2\x88\xae", + "\xcf\x86", + "\xe2\x88\x88", + "\xe2\x88\x8f", + "\xe2\x89\xa1", + "\xc2\xb1", + "\xe2\x89\xa5", + "\xe2\x89\xa4", + "\xe2\x8c\xa0", + "\xe2\x8c\xa1", + "\xc3\xb7", + "\xe2\x89\x88", + "\xc2\xb0", + "\xe2\x80\xa2", + "\xc2\xb7", + "\xe2\x88\x9a", + "\xe2\x81\xbf", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xaf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a1 => "\xad", + 0x000000a2 => "\x9b", + 0x000000a3 => "\x9c", + 0x000000a5 => "\x9d", + 0x000000a7 => "\xdd", + 0x000000a8 => "\xb9", + 0x000000a9 => "\xbd", + 0x000000aa => "\xa6", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000ae => "\xbe", + 0x000000af => "\xff", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b3 => "\xfe", + 0x000000b4 => "\xba", + 0x000000b5 => "\xe6", + 0x000000b6 => "\xbc", + 0x000000b7 => "\xfa", + 0x000000ba => "\xa7", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000bf => "\xa8", + 0x000000c0 => "\xb6", + 0x000000c3 => "\xb7", + 0x000000c4 => "\x8e", + 0x000000c5 => "\x8f", + 0x000000c6 => "\x92", + 0x000000c7 => "\x80", + 0x000000c9 => "\x90", + 0x000000d1 => "\xa5", + 0x000000d5 => "\xb8", + 0x000000d6 => "\x99", + 0x000000d8 => "\xb2", + 0x000000dc => "\x9a", + 0x000000df => "\x9e", + 0x000000e0 => "\x85", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e3 => "\xb0", + 0x000000e4 => "\x84", + 0x000000e5 => "\x86", + 0x000000e6 => "\x91", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ec => "\x8d", + 0x000000ed => "\xa1", + 0x000000ee => "\x8c", + 0x000000ef => "\x8b", + 0x000000f1 => "\xa4", + 0x000000f2 => "\x95", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f5 => "\xb1", + 0x000000f6 => "\x94", + 0x000000f7 => "\xf6", + 0x000000f8 => "\xb3", + 0x000000f9 => "\x97", + 0x000000fa => "\xa3", + 0x000000fb => "\x96", + 0x000000fc => "\x81", + 0x000000ff => "\x98", + 0x00000132 => "\xc1", + 0x00000133 => "\xc0", + 0x00000152 => "\xb5", + 0x00000153 => "\xb4", + 0x00000192 => "\x9f", + 0x00000393 => "\xe2", + 0x000003a3 => "\xe4", + 0x000003a6 => "\xe8", + 0x000003a9 => "\xea", + 0x000003b1 => "\xe0", + 0x000003b2 => "\xe1", + 0x000003b4 => "\xeb", + 0x000003b8 => "\xe9", + 0x000003c0 => "\xe3", + 0x000003c3 => "\xe5", + 0x000003c4 => "\xe7", + 0x000003c6 => "\xed", + 0x000005d0 => "\xc2", + 0x000005d1 => "\xc3", + 0x000005d2 => "\xc4", + 0x000005d3 => "\xc5", + 0x000005d4 => "\xc6", + 0x000005d5 => "\xc7", + 0x000005d6 => "\xc8", + 0x000005d7 => "\xc9", + 0x000005d8 => "\xca", + 0x000005d9 => "\xcb", + 0x000005da => "\xd9", + 0x000005db => "\xcc", + 0x000005dc => "\xcd", + 0x000005dd => "\xda", + 0x000005de => "\xce", + 0x000005df => "\xd8", + 0x000005e0 => "\xcf", + 0x000005e1 => "\xd0", + 0x000005e2 => "\xd1", + 0x000005e3 => "\xdb", + 0x000005e4 => "\xd2", + 0x000005e5 => "\xdc", + 0x000005e6 => "\xd3", + 0x000005e7 => "\xd4", + 0x000005e8 => "\xd5", + 0x000005e9 => "\xd6", + 0x000005ea => "\xd7", + 0x00002020 => "\xbb", + 0x00002022 => "\xf9", + 0x00002038 => "\xde", + 0x0000207f => "\xfc", + 0x00002122 => "\xbf", + 0x00002208 => "\xee", + 0x0000220f => "\xef", + 0x0000221a => "\xfb", + 0x0000221e => "\xdf", + 0x0000222e => "\xec", + 0x00002248 => "\xf7", + 0x00002261 => "\xf0", + 0x00002264 => "\xf3", + 0x00002265 => "\xf2", + 0x00002310 => "\xa9", + 0x00002320 => "\xf4", + 0x00002321 => "\xf5", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ATARI_ST - Conversion routines for ATARI-ST + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ATARI-ST. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.1 + source: Guido Flohr Eguido.flohr@cantanea.comE + alias ATARIST + alias X-ATARIST + alias X-ATARI-ST + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000E6 | LATIN SMALL LETTER AE + 92 | 000000C6 | LATIN CAPITAL LETTER AE + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 98 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000A2 | CENT SIGN + 9C | 000000A3 | POUND SIGN + 9D | 000000A5 | YEN SIGN + 9E | 000000DF | LATIN SMALL LETTER SHARP S + 9F | 00000192 | LATIN SMALL LETTER F WITH HOOK + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + A6 | 000000AA | FEMININE ORDINAL INDICATOR + A7 | 000000BA | MASCULINE ORDINAL INDICATOR + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 00002310 | REVERSED NOT SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + B1 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + B2 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + B3 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + B4 | 00000153 | LATIN SMALL LIGATURE OE + B5 | 00000152 | LATIN CAPITAL LIGATURE OE + B6 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + B7 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + B8 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + B9 | 000000A8 | DIAERESIS + BA | 000000B4 | ACUTE ACCENT + BB | 00002020 | DAGGER + BC | 000000B6 | PILCROW SIGN + BD | 000000A9 | COPYRIGHT SIGN + BE | 000000AE | REGISTERED SIGN + BF | 00002122 | TRADE MARK SIGN + C0 | 00000133 | LATIN SMALL LIGATURE IJ + C1 | 00000132 | LATIN CAPITAL LIGATURE IJ + C2 | 000005D0 | HEBREW LETTER ALEF + C3 | 000005D1 | HEBREW LETTER BET + C4 | 000005D2 | HEBREW LETTER GIMEL + C5 | 000005D3 | HEBREW LETTER DALET + C6 | 000005D4 | HEBREW LETTER HE + C7 | 000005D5 | HEBREW LETTER VAV + C8 | 000005D6 | HEBREW LETTER ZAYIN + C9 | 000005D7 | HEBREW LETTER HET + CA | 000005D8 | HEBREW LETTER TET + CB | 000005D9 | HEBREW LETTER YOD + CC | 000005DB | HEBREW LETTER KAF + CD | 000005DC | HEBREW LETTER LAMED + CE | 000005DE | HEBREW LETTER MEM + CF | 000005E0 | HEBREW LETTER NUN + D0 | 000005E1 | HEBREW LETTER SAMEKH + D1 | 000005E2 | HEBREW LETTER AYIN + D2 | 000005E4 | HEBREW LETTER PE + D3 | 000005E6 | HEBREW LETTER TSADI + D4 | 000005E7 | HEBREW LETTER QOF + D5 | 000005E8 | HEBREW LETTER RESH + D6 | 000005E9 | HEBREW LETTER SHIN + D7 | 000005EA | HEBREW LETTER TAV + D8 | 000005DF | HEBREW LETTER FINAL NUN + D9 | 000005DA | HEBREW LETTER FINAL KAF + DA | 000005DD | HEBREW LETTER FINAL MEM + DB | 000005E3 | HEBREW LETTER FINAL PE + DC | 000005E5 | HEBREW LETTER FINAL TSADI + DD | 000000A7 | SECTION SIGN + DE | 00002038 | CARET + DF | 0000221E | INFINITY + E0 | 000003B1 | GREEK SMALL LETTER ALPHA + E1 | 000003B2 | GREEK SMALL LETTER BETA + E2 | 00000393 | GREEK CAPITAL LETTER GAMMA + E3 | 000003C0 | GREEK SMALL LETTER PI + E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA + E5 | 000003C3 | GREEK SMALL LETTER SIGMA + E6 | 000000B5 | MICRO SIGN + E7 | 000003C4 | GREEK SMALL LETTER TAU + E8 | 000003A6 | GREEK CAPITAL LETTER PHI + E9 | 000003B8 | GREEK SMALL LETTER THETA + EA | 000003A9 | GREEK CAPITAL LETTER OMEGA + EB | 000003B4 | GREEK SMALL LETTER DELTA + EC | 0000222E | CONTOUR INTEGRAL + ED | 000003C6 | GREEK SMALL LETTER PHI + EE | 00002208 | ELEMENT OF + EF | 0000220F | N-ARY PRODUCT + F0 | 00002261 | IDENTICAL TO + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002265 | GREATER-THAN OR EQUAL TO + F3 | 00002264 | LESS-THAN OR EQUAL TO + F4 | 00002320 | TOP HALF INTEGRAL + F5 | 00002321 | BOTTOM HALF INTEGRAL + F6 | 000000F7 | DIVISION SIGN + F7 | 00002248 | ALMOST EQUAL TO + F8 | 000000B0 | DEGREE SIGN + F9 | 00002022 | BULLET + FA | 000000B7 | MIDDLE DOT + FB | 0000221A | SQUARE ROOT + FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000000B3 | SUPERSCRIPT THREE + FF | 000000AF | MACRON + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ATARI_ST_EURO.pm b/lib/Locale/RecodeData/ATARI_ST_EURO.pm new file mode 100644 index 0000000..b3ad5a0 --- /dev/null +++ b/lib/Locale/RecodeData/ATARI_ST_EURO.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ATARI-ST-EURO. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ATARI_ST_EURO; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e5, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ef, + 0x00ee, + 0x00ec, + 0x00c4, + 0x00c5, + 0x00c9, + 0x00e6, + 0x00c6, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00fb, + 0x00f9, + 0x00ff, + 0x00d6, + 0x00dc, + 0x00a2, + 0x00a3, + 0x00a5, + 0x00df, + 0x0192, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00f1, + 0x00d1, + 0x00aa, + 0x00ba, + 0x00bf, + 0x2310, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00bb, + 0x00e3, + 0x00f5, + 0x00d8, + 0x00f8, + 0x0153, + 0x0152, + 0x00c0, + 0x00c3, + 0x00d5, + 0x00a8, + 0x00b4, + 0x2020, + 0x00b6, + 0x00a9, + 0x00ae, + 0x2122, + 0x0133, + 0x0132, + 0x05d0, + 0x05d1, + 0x05d2, + 0x05d3, + 0x05d4, + 0x05d5, + 0x05d6, + 0x05d7, + 0x05d8, + 0x05d9, + 0x05db, + 0x05dc, + 0x05de, + 0x05e0, + 0x05e1, + 0x05e2, + 0x05e4, + 0x05e6, + 0x05e7, + 0x05e8, + 0x05e9, + 0x05ea, + 0x05df, + 0x05da, + 0x05dd, + 0x05e3, + 0x05e5, + 0x00a7, + 0x20ac, + 0x221e, + 0x03b1, + 0x03b2, + 0x0393, + 0x03c0, + 0x03a3, + 0x03c3, + 0x00b5, + 0x03c4, + 0x03a6, + 0x03b8, + 0x03a9, + 0x03b4, + 0x222e, + 0x03c6, + 0x2208, + 0x220f, + 0x2261, + 0x00b1, + 0x2265, + 0x2264, + 0x2320, + 0x2321, + 0x00f7, + 0x2248, + 0x00b0, + 0x2022, + 0x00b7, + 0x221a, + 0x207f, + 0x00b2, + 0x00b3, + 0x00af, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xaf", + "\xc3\xae", + "\xc3\xac", + "\xc3\x84", + "\xc3\x85", + "\xc3\x89", + "\xc3\xa6", + "\xc3\x86", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xbb", + "\xc3\xb9", + "\xc3\xbf", + "\xc3\x96", + "\xc3\x9c", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xc3\x9f", + "\xc6\x92", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xb1", + "\xc3\x91", + "\xc2\xaa", + "\xc2\xba", + "\xc2\xbf", + "\xe2\x8c\x90", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xa3", + "\xc3\xb5", + "\xc3\x98", + "\xc3\xb8", + "\xc5\x93", + "\xc5\x92", + "\xc3\x80", + "\xc3\x83", + "\xc3\x95", + "\xc2\xa8", + "\xc2\xb4", + "\xe2\x80\xa0", + "\xc2\xb6", + "\xc2\xa9", + "\xc2\xae", + "\xe2\x84\xa2", + "\xc4\xb3", + "\xc4\xb2", + "\xd7\x90", + "\xd7\x91", + "\xd7\x92", + "\xd7\x93", + "\xd7\x94", + "\xd7\x95", + "\xd7\x96", + "\xd7\x97", + "\xd7\x98", + "\xd7\x99", + "\xd7\x9b", + "\xd7\x9c", + "\xd7\x9e", + "\xd7\xa0", + "\xd7\xa1", + "\xd7\xa2", + "\xd7\xa4", + "\xd7\xa6", + "\xd7\xa7", + "\xd7\xa8", + "\xd7\xa9", + "\xd7\xaa", + "\xd7\x9f", + "\xd7\x9a", + "\xd7\x9d", + "\xd7\xa3", + "\xd7\xa5", + "\xc2\xa7", + "\xe2\x82\xac", + "\xe2\x88\x9e", + "\xce\xb1", + "\xce\xb2", + "\xce\x93", + "\xcf\x80", + "\xce\xa3", + "\xcf\x83", + "\xc2\xb5", + "\xcf\x84", + "\xce\xa6", + "\xce\xb8", + "\xce\xa9", + "\xce\xb4", + "\xe2\x88\xae", + "\xcf\x86", + "\xe2\x88\x88", + "\xe2\x88\x8f", + "\xe2\x89\xa1", + "\xc2\xb1", + "\xe2\x89\xa5", + "\xe2\x89\xa4", + "\xe2\x8c\xa0", + "\xe2\x8c\xa1", + "\xc3\xb7", + "\xe2\x89\x88", + "\xc2\xb0", + "\xe2\x80\xa2", + "\xc2\xb7", + "\xe2\x88\x9a", + "\xe2\x81\xbf", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xaf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a1 => "\xad", + 0x000000a2 => "\x9b", + 0x000000a3 => "\x9c", + 0x000000a5 => "\x9d", + 0x000000a7 => "\xdd", + 0x000000a8 => "\xb9", + 0x000000a9 => "\xbd", + 0x000000aa => "\xa6", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000ae => "\xbe", + 0x000000af => "\xff", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b3 => "\xfe", + 0x000000b4 => "\xba", + 0x000000b5 => "\xe6", + 0x000000b6 => "\xbc", + 0x000000b7 => "\xfa", + 0x000000ba => "\xa7", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000bf => "\xa8", + 0x000000c0 => "\xb6", + 0x000000c3 => "\xb7", + 0x000000c4 => "\x8e", + 0x000000c5 => "\x8f", + 0x000000c6 => "\x92", + 0x000000c7 => "\x80", + 0x000000c9 => "\x90", + 0x000000d1 => "\xa5", + 0x000000d5 => "\xb8", + 0x000000d6 => "\x99", + 0x000000d8 => "\xb2", + 0x000000dc => "\x9a", + 0x000000df => "\x9e", + 0x000000e0 => "\x85", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e3 => "\xb0", + 0x000000e4 => "\x84", + 0x000000e5 => "\x86", + 0x000000e6 => "\x91", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ec => "\x8d", + 0x000000ed => "\xa1", + 0x000000ee => "\x8c", + 0x000000ef => "\x8b", + 0x000000f1 => "\xa4", + 0x000000f2 => "\x95", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f5 => "\xb1", + 0x000000f6 => "\x94", + 0x000000f7 => "\xf6", + 0x000000f8 => "\xb3", + 0x000000f9 => "\x97", + 0x000000fa => "\xa3", + 0x000000fb => "\x96", + 0x000000fc => "\x81", + 0x000000ff => "\x98", + 0x00000132 => "\xc1", + 0x00000133 => "\xc0", + 0x00000152 => "\xb5", + 0x00000153 => "\xb4", + 0x00000192 => "\x9f", + 0x00000393 => "\xe2", + 0x000003a3 => "\xe4", + 0x000003a6 => "\xe8", + 0x000003a9 => "\xea", + 0x000003b1 => "\xe0", + 0x000003b2 => "\xe1", + 0x000003b4 => "\xeb", + 0x000003b8 => "\xe9", + 0x000003c0 => "\xe3", + 0x000003c3 => "\xe5", + 0x000003c4 => "\xe7", + 0x000003c6 => "\xed", + 0x000005d0 => "\xc2", + 0x000005d1 => "\xc3", + 0x000005d2 => "\xc4", + 0x000005d3 => "\xc5", + 0x000005d4 => "\xc6", + 0x000005d5 => "\xc7", + 0x000005d6 => "\xc8", + 0x000005d7 => "\xc9", + 0x000005d8 => "\xca", + 0x000005d9 => "\xcb", + 0x000005da => "\xd9", + 0x000005db => "\xcc", + 0x000005dc => "\xcd", + 0x000005dd => "\xda", + 0x000005de => "\xce", + 0x000005df => "\xd8", + 0x000005e0 => "\xcf", + 0x000005e1 => "\xd0", + 0x000005e2 => "\xd1", + 0x000005e3 => "\xdb", + 0x000005e4 => "\xd2", + 0x000005e5 => "\xdc", + 0x000005e6 => "\xd3", + 0x000005e7 => "\xd4", + 0x000005e8 => "\xd5", + 0x000005e9 => "\xd6", + 0x000005ea => "\xd7", + 0x00002020 => "\xbb", + 0x00002022 => "\xf9", + 0x0000207f => "\xfc", + 0x000020ac => "\xde", + 0x00002122 => "\xbf", + 0x00002208 => "\xee", + 0x0000220f => "\xef", + 0x0000221a => "\xfb", + 0x0000221e => "\xdf", + 0x0000222e => "\xec", + 0x00002248 => "\xf7", + 0x00002261 => "\xf0", + 0x00002264 => "\xf3", + 0x00002265 => "\xf2", + 0x00002310 => "\xa9", + 0x00002320 => "\xf4", + 0x00002321 => "\xf5", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ATARI_ST_EURO - Conversion routines for ATARI-ST-EURO + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ATARI-ST-EURO. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.1 + source: Guido Flohr Eguido.flohr@cantanea.comE + alias ATARIST-EURO + alias X-ATARIST-EURO + alias X-ATARI-ST-EURO + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000E6 | LATIN SMALL LETTER AE + 92 | 000000C6 | LATIN CAPITAL LETTER AE + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 98 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000A2 | CENT SIGN + 9C | 000000A3 | POUND SIGN + 9D | 000000A5 | YEN SIGN + 9E | 000000DF | LATIN SMALL LETTER SHARP S + 9F | 00000192 | LATIN SMALL LETTER F WITH HOOK + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + A6 | 000000AA | FEMININE ORDINAL INDICATOR + A7 | 000000BA | MASCULINE ORDINAL INDICATOR + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 00002310 | REVERSED NOT SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + B1 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + B2 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + B3 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + B4 | 00000153 | LATIN SMALL LIGATURE OE + B5 | 00000152 | LATIN CAPITAL LIGATURE OE + B6 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + B7 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + B8 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + B9 | 000000A8 | DIAERESIS + BA | 000000B4 | ACUTE ACCENT + BB | 00002020 | DAGGER + BC | 000000B6 | PILCROW SIGN + BD | 000000A9 | COPYRIGHT SIGN + BE | 000000AE | REGISTERED SIGN + BF | 00002122 | TRADE MARK SIGN + C0 | 00000133 | LATIN SMALL LIGATURE IJ + C1 | 00000132 | LATIN CAPITAL LIGATURE IJ + C2 | 000005D0 | HEBREW LETTER ALEF + C3 | 000005D1 | HEBREW LETTER BET + C4 | 000005D2 | HEBREW LETTER GIMEL + C5 | 000005D3 | HEBREW LETTER DALET + C6 | 000005D4 | HEBREW LETTER HE + C7 | 000005D5 | HEBREW LETTER VAV + C8 | 000005D6 | HEBREW LETTER ZAYIN + C9 | 000005D7 | HEBREW LETTER HET + CA | 000005D8 | HEBREW LETTER TET + CB | 000005D9 | HEBREW LETTER YOD + CC | 000005DB | HEBREW LETTER KAF + CD | 000005DC | HEBREW LETTER LAMED + CE | 000005DE | HEBREW LETTER MEM + CF | 000005E0 | HEBREW LETTER NUN + D0 | 000005E1 | HEBREW LETTER SAMEKH + D1 | 000005E2 | HEBREW LETTER AYIN + D2 | 000005E4 | HEBREW LETTER PE + D3 | 000005E6 | HEBREW LETTER TSADI + D4 | 000005E7 | HEBREW LETTER QOF + D5 | 000005E8 | HEBREW LETTER RESH + D6 | 000005E9 | HEBREW LETTER SHIN + D7 | 000005EA | HEBREW LETTER TAV + D8 | 000005DF | HEBREW LETTER FINAL NUN + D9 | 000005DA | HEBREW LETTER FINAL KAF + DA | 000005DD | HEBREW LETTER FINAL MEM + DB | 000005E3 | HEBREW LETTER FINAL PE + DC | 000005E5 | HEBREW LETTER FINAL TSADI + DD | 000000A7 | SECTION SIGN + DE | 000020AC | EURO SIGN + DF | 0000221E | INFINITY + E0 | 000003B1 | GREEK SMALL LETTER ALPHA + E1 | 000003B2 | GREEK SMALL LETTER BETA + E2 | 00000393 | GREEK CAPITAL LETTER GAMMA + E3 | 000003C0 | GREEK SMALL LETTER PI + E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA + E5 | 000003C3 | GREEK SMALL LETTER SIGMA + E6 | 000000B5 | MICRO SIGN + E7 | 000003C4 | GREEK SMALL LETTER TAU + E8 | 000003A6 | GREEK CAPITAL LETTER PHI + E9 | 000003B8 | GREEK SMALL LETTER THETA + EA | 000003A9 | GREEK CAPITAL LETTER OMEGA + EB | 000003B4 | GREEK SMALL LETTER DELTA + EC | 0000222E | CONTOUR INTEGRAL + ED | 000003C6 | GREEK SMALL LETTER PHI + EE | 00002208 | ELEMENT OF + EF | 0000220F | N-ARY PRODUCT + F0 | 00002261 | IDENTICAL TO + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002265 | GREATER-THAN OR EQUAL TO + F3 | 00002264 | LESS-THAN OR EQUAL TO + F4 | 00002320 | TOP HALF INTEGRAL + F5 | 00002321 | BOTTOM HALF INTEGRAL + F6 | 000000F7 | DIVISION SIGN + F7 | 00002248 | ALMOST EQUAL TO + F8 | 000000B0 | DEGREE SIGN + F9 | 00002022 | BULLET + FA | 000000B7 | MIDDLE DOT + FB | 0000221A | SQUARE ROOT + FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000000B3 | SUPERSCRIPT THREE + FF | 000000AF | MACRON + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CP10007.pm b/lib/Locale/RecodeData/CP10007.pm new file mode 100644 index 0000000..9e49e85 --- /dev/null +++ b/lib/Locale/RecodeData/CP10007.pm @@ -0,0 +1,1138 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CP10007. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CP10007; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x2020, + 0x00b0, + 0x00a2, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x0406, + 0x00ae, + 0x00a9, + 0x2122, + 0x0402, + 0x0452, + 0x2260, + 0x0403, + 0x0453, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x0456, + 0x00b5, + 0x0491, + 0x0408, + 0x0404, + 0x0454, + 0x0407, + 0x0457, + 0x0409, + 0x0459, + 0x040a, + 0x045a, + 0x0458, + 0x0405, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x2206, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x040b, + 0x045b, + 0x040c, + 0x045c, + 0x0455, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x201e, + 0x040e, + 0x045e, + 0x040f, + 0x045f, + 0x2116, + 0x0401, + 0x0451, + 0x044f, + 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, + 0x00a4, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd0\x90", + "\xd0\x91", + "\xd0\x92", + "\xd0\x93", + "\xd0\x94", + "\xd0\x95", + "\xd0\x96", + "\xd0\x97", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\xa4", + "\xd0\xa5", + "\xd0\xa6", + "\xd0\xa7", + "\xd0\xa8", + "\xd0\xa9", + "\xd0\xaa", + "\xd0\xab", + "\xd0\xac", + "\xd0\xad", + "\xd0\xae", + "\xd0\xaf", + "\xe2\x80\xa0", + "\xc2\xb0", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xd0\x86", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xd0\x82", + "\xd1\x92", + "\xe2\x89\xa0", + "\xd0\x83", + "\xd1\x93", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xd1\x96", + "\xc2\xb5", + "\xd2\x91", + "\xd0\x88", + "\xd0\x84", + "\xd1\x94", + "\xd0\x87", + "\xd1\x97", + "\xd0\x89", + "\xd1\x99", + "\xd0\x8a", + "\xd1\x9a", + "\xd1\x98", + "\xd0\x85", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xe2\x88\x86", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xd0\x8b", + "\xd1\x9b", + "\xd0\x8c", + "\xd1\x9c", + "\xd1\x95", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x80\x9e", + "\xd0\x8e", + "\xd1\x9e", + "\xd0\x8f", + "\xd1\x9f", + "\xe2\x84\x96", + "\xd0\x81", + "\xd1\x91", + "\xd1\x8f", + "\xd0\xb0", + "\xd0\xb1", + "\xd0\xb2", + "\xd0\xb3", + "\xd0\xb4", + "\xd0\xb5", + "\xd0\xb6", + "\xd0\xb7", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd1\x84", + "\xd1\x85", + "\xd1\x86", + "\xd1\x87", + "\xd1\x88", + "\xd1\x89", + "\xd1\x8a", + "\xd1\x8b", + "\xd1\x8c", + "\xd1\x8d", + "\xd1\x8e", + "\xc2\xa4", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xff", + 0x000000a7 => "\xa4", + 0x000000a9 => "\xa9", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000bb => "\xc8", + 0x000000f7 => "\xd6", + 0x00000192 => "\xc4", + 0x00000401 => "\xdd", + 0x00000402 => "\xab", + 0x00000403 => "\xae", + 0x00000404 => "\xb8", + 0x00000405 => "\xc1", + 0x00000406 => "\xa7", + 0x00000407 => "\xba", + 0x00000408 => "\xb7", + 0x00000409 => "\xbc", + 0x0000040a => "\xbe", + 0x0000040b => "\xcb", + 0x0000040c => "\xcd", + 0x0000040e => "\xd8", + 0x0000040f => "\xda", + 0x00000410 => "\x80", + 0x00000411 => "\x81", + 0x00000412 => "\x82", + 0x00000413 => "\x83", + 0x00000414 => "\x84", + 0x00000415 => "\x85", + 0x00000416 => "\x86", + 0x00000417 => "\x87", + 0x00000418 => "\x88", + 0x00000419 => "\x89", + 0x0000041a => "\x8a", + 0x0000041b => "\x8b", + 0x0000041c => "\x8c", + 0x0000041d => "\x8d", + 0x0000041e => "\x8e", + 0x0000041f => "\x8f", + 0x00000420 => "\x90", + 0x00000421 => "\x91", + 0x00000422 => "\x92", + 0x00000423 => "\x93", + 0x00000424 => "\x94", + 0x00000425 => "\x95", + 0x00000426 => "\x96", + 0x00000427 => "\x97", + 0x00000428 => "\x98", + 0x00000429 => "\x99", + 0x0000042a => "\x9a", + 0x0000042b => "\x9b", + 0x0000042c => "\x9c", + 0x0000042d => "\x9d", + 0x0000042e => "\x9e", + 0x0000042f => "\x9f", + 0x00000430 => "\xe0", + 0x00000431 => "\xe1", + 0x00000432 => "\xe2", + 0x00000433 => "\xe3", + 0x00000434 => "\xe4", + 0x00000435 => "\xe5", + 0x00000436 => "\xe6", + 0x00000437 => "\xe7", + 0x00000438 => "\xe8", + 0x00000439 => "\xe9", + 0x0000043a => "\xea", + 0x0000043b => "\xeb", + 0x0000043c => "\xec", + 0x0000043d => "\xed", + 0x0000043e => "\xee", + 0x0000043f => "\xef", + 0x00000440 => "\xf0", + 0x00000441 => "\xf1", + 0x00000442 => "\xf2", + 0x00000443 => "\xf3", + 0x00000444 => "\xf4", + 0x00000445 => "\xf5", + 0x00000446 => "\xf6", + 0x00000447 => "\xf7", + 0x00000448 => "\xf8", + 0x00000449 => "\xf9", + 0x0000044a => "\xfa", + 0x0000044b => "\xfb", + 0x0000044c => "\xfc", + 0x0000044d => "\xfd", + 0x0000044e => "\xfe", + 0x0000044f => "\xdf", + 0x00000451 => "\xde", + 0x00000452 => "\xac", + 0x00000453 => "\xaf", + 0x00000454 => "\xb9", + 0x00000455 => "\xcf", + 0x00000456 => "\xb4", + 0x00000457 => "\xbb", + 0x00000458 => "\xc0", + 0x00000459 => "\xbd", + 0x0000045a => "\xbf", + 0x0000045b => "\xcc", + 0x0000045c => "\xce", + 0x0000045e => "\xd9", + 0x0000045f => "\xdb", + 0x00000491 => "\xb6", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xd7", + 0x00002020 => "\xa0", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002116 => "\xdc", + 0x00002122 => "\xaa", + 0x00002206 => "\xc6", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CP10007 - Conversion routines for CP10007 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CP10007. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + This is the old MacCyrillic which M$ keeps around as CP10007. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 00000410 | CYRILLIC CAPITAL LETTER A + 81 | 00000411 | CYRILLIC CAPITAL LETTER BE + 82 | 00000412 | CYRILLIC CAPITAL LETTER VE + 83 | 00000413 | CYRILLIC CAPITAL LETTER GHE + 84 | 00000414 | CYRILLIC CAPITAL LETTER DE + 85 | 00000415 | CYRILLIC CAPITAL LETTER IE + 86 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + 87 | 00000417 | CYRILLIC CAPITAL LETTER ZE + 88 | 00000418 | CYRILLIC CAPITAL LETTER I + 89 | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + 8A | 0000041A | CYRILLIC CAPITAL LETTER KA + 8B | 0000041B | CYRILLIC CAPITAL LETTER EL + 8C | 0000041C | CYRILLIC CAPITAL LETTER EM + 8D | 0000041D | CYRILLIC CAPITAL LETTER EN + 8E | 0000041E | CYRILLIC CAPITAL LETTER O + 8F | 0000041F | CYRILLIC CAPITAL LETTER PE + 90 | 00000420 | CYRILLIC CAPITAL LETTER ER + 91 | 00000421 | CYRILLIC CAPITAL LETTER ES + 92 | 00000422 | CYRILLIC CAPITAL LETTER TE + 93 | 00000423 | CYRILLIC CAPITAL LETTER U + 94 | 00000424 | CYRILLIC CAPITAL LETTER EF + 95 | 00000425 | CYRILLIC CAPITAL LETTER HA + 96 | 00000426 | CYRILLIC CAPITAL LETTER TSE + 97 | 00000427 | CYRILLIC CAPITAL LETTER CHE + 98 | 00000428 | CYRILLIC CAPITAL LETTER SHA + 99 | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + 9A | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + 9B | 0000042B | CYRILLIC CAPITAL LETTER YERU + 9C | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + 9D | 0000042D | CYRILLIC CAPITAL LETTER E + 9E | 0000042E | CYRILLIC CAPITAL LETTER YU + 9F | 0000042F | CYRILLIC CAPITAL LETTER YA + A0 | 00002020 | DAGGER + A1 | 000000B0 | DEGREE SIGN + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 00000402 | CYRILLIC CAPITAL LETTER DJE + AC | 00000452 | CYRILLIC SMALL LETTER DJE + AD | 00002260 | NOT EQUAL TO + AE | 00000403 | CYRILLIC CAPITAL LETTER GJE + AF | 00000453 | CYRILLIC SMALL LETTER GJE + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + B5 | 000000B5 | MICRO SIGN + B6 | 00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN + B7 | 00000408 | CYRILLIC CAPITAL LETTER JE + B8 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + B9 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + BA | 00000407 | CYRILLIC CAPITAL LETTER YI + BB | 00000457 | CYRILLIC SMALL LETTER YI + BC | 00000409 | CYRILLIC CAPITAL LETTER LJE + BD | 00000459 | CYRILLIC SMALL LETTER LJE + BE | 0000040A | CYRILLIC CAPITAL LETTER NJE + BF | 0000045A | CYRILLIC SMALL LETTER NJE + C0 | 00000458 | CYRILLIC SMALL LETTER JE + C1 | 00000405 | CYRILLIC CAPITAL LETTER DZE + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00002206 | INCREMENT + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 0000040B | CYRILLIC CAPITAL LETTER TSHE + CC | 0000045B | CYRILLIC SMALL LETTER TSHE + CD | 0000040C | CYRILLIC CAPITAL LETTER KJE + CE | 0000045C | CYRILLIC SMALL LETTER KJE + CF | 00000455 | CYRILLIC SMALL LETTER DZE + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + D8 | 0000040E | CYRILLIC CAPITAL LETTER SHORT U + D9 | 0000045E | CYRILLIC SMALL LETTER SHORT U + DA | 0000040F | CYRILLIC CAPITAL LETTER DZHE + DB | 0000045F | CYRILLIC SMALL LETTER DZHE + DC | 00002116 | NUMERO SIGN + DD | 00000401 | CYRILLIC CAPITAL LETTER IO + DE | 00000451 | CYRILLIC SMALL LETTER IO + DF | 0000044F | CYRILLIC SMALL LETTER YA + E0 | 00000430 | CYRILLIC SMALL LETTER A + E1 | 00000431 | CYRILLIC SMALL LETTER BE + E2 | 00000432 | CYRILLIC SMALL LETTER VE + E3 | 00000433 | CYRILLIC SMALL LETTER GHE + E4 | 00000434 | CYRILLIC SMALL LETTER DE + E5 | 00000435 | CYRILLIC SMALL LETTER IE + E6 | 00000436 | CYRILLIC SMALL LETTER ZHE + E7 | 00000437 | CYRILLIC SMALL LETTER ZE + E8 | 00000438 | CYRILLIC SMALL LETTER I + E9 | 00000439 | CYRILLIC SMALL LETTER SHORT I + EA | 0000043A | CYRILLIC SMALL LETTER KA + EB | 0000043B | CYRILLIC SMALL LETTER EL + EC | 0000043C | CYRILLIC SMALL LETTER EM + ED | 0000043D | CYRILLIC SMALL LETTER EN + EE | 0000043E | CYRILLIC SMALL LETTER O + EF | 0000043F | CYRILLIC SMALL LETTER PE + F0 | 00000440 | CYRILLIC SMALL LETTER ER + F1 | 00000441 | CYRILLIC SMALL LETTER ES + F2 | 00000442 | CYRILLIC SMALL LETTER TE + F3 | 00000443 | CYRILLIC SMALL LETTER U + F4 | 00000444 | CYRILLIC SMALL LETTER EF + F5 | 00000445 | CYRILLIC SMALL LETTER HA + F6 | 00000446 | CYRILLIC SMALL LETTER TSE + F7 | 00000447 | CYRILLIC SMALL LETTER CHE + F8 | 00000448 | CYRILLIC SMALL LETTER SHA + F9 | 00000449 | CYRILLIC SMALL LETTER SHCHA + FA | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + FB | 0000044B | CYRILLIC SMALL LETTER YERU + FC | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + FD | 0000044D | CYRILLIC SMALL LETTER E + FE | 0000044E | CYRILLIC SMALL LETTER YU + FF | 000000A4 | CURRENCY SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CP1250.pm b/lib/Locale/RecodeData/CP1250.pm new file mode 100644 index 0000000..24c6c34 --- /dev/null +++ b/lib/Locale/RecodeData/CP1250.pm @@ -0,0 +1,1131 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CP1250. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CP1250; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x20ac, + 0xfffd, + 0x201a, + 0xfffd, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0xfffd, + 0x2030, + 0x0160, + 0x2039, + 0x015a, + 0x0164, + 0x017d, + 0x0179, + 0xfffd, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0xfffd, + 0x2122, + 0x0161, + 0x203a, + 0x015b, + 0x0165, + 0x017e, + 0x017a, + 0x00a0, + 0x02c7, + 0x02d8, + 0x0141, + 0x00a4, + 0x0104, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x015e, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x017b, + 0x00b0, + 0x00b1, + 0x02db, + 0x0142, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00b8, + 0x0105, + 0x015f, + 0x00bb, + 0x013d, + 0x02dd, + 0x013e, + 0x017c, + 0x0154, + 0x00c1, + 0x00c2, + 0x0102, + 0x00c4, + 0x0139, + 0x0106, + 0x00c7, + 0x010c, + 0x00c9, + 0x0118, + 0x00cb, + 0x011a, + 0x00cd, + 0x00ce, + 0x010e, + 0x0110, + 0x0143, + 0x0147, + 0x00d3, + 0x00d4, + 0x0150, + 0x00d6, + 0x00d7, + 0x0158, + 0x016e, + 0x00da, + 0x0170, + 0x00dc, + 0x00dd, + 0x0162, + 0x00df, + 0x0155, + 0x00e1, + 0x00e2, + 0x0103, + 0x00e4, + 0x013a, + 0x0107, + 0x00e7, + 0x010d, + 0x00e9, + 0x0119, + 0x00eb, + 0x011b, + 0x00ed, + 0x00ee, + 0x010f, + 0x0111, + 0x0144, + 0x0148, + 0x00f3, + 0x00f4, + 0x0151, + 0x00f6, + 0x00f7, + 0x0159, + 0x016f, + 0x00fa, + 0x0171, + 0x00fc, + 0x00fd, + 0x0163, + 0x02d9, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x82\xac", + "\xef\xbf\xbd", + "\xe2\x80\x9a", + "\xef\xbf\xbd", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xef\xbf\xbd", + "\xe2\x80\xb0", + "\xc5\xa0", + "\xe2\x80\xb9", + "\xc5\x9a", + "\xc5\xa4", + "\xc5\xbd", + "\xc5\xb9", + "\xef\xbf\xbd", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xef\xbf\xbd", + "\xe2\x84\xa2", + "\xc5\xa1", + "\xe2\x80\xba", + "\xc5\x9b", + "\xc5\xa5", + "\xc5\xbe", + "\xc5\xba", + "\xc2\xa0", + "\xcb\x87", + "\xcb\x98", + "\xc5\x81", + "\xc2\xa4", + "\xc4\x84", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc5\x9e", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc5\xbb", + "\xc2\xb0", + "\xc2\xb1", + "\xcb\x9b", + "\xc5\x82", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc4\x85", + "\xc5\x9f", + "\xc2\xbb", + "\xc4\xbd", + "\xcb\x9d", + "\xc4\xbe", + "\xc5\xbc", + "\xc5\x94", + "\xc3\x81", + "\xc3\x82", + "\xc4\x82", + "\xc3\x84", + "\xc4\xb9", + "\xc4\x86", + "\xc3\x87", + "\xc4\x8c", + "\xc3\x89", + "\xc4\x98", + "\xc3\x8b", + "\xc4\x9a", + "\xc3\x8d", + "\xc3\x8e", + "\xc4\x8e", + "\xc4\x90", + "\xc5\x83", + "\xc5\x87", + "\xc3\x93", + "\xc3\x94", + "\xc5\x90", + "\xc3\x96", + "\xc3\x97", + "\xc5\x98", + "\xc5\xae", + "\xc3\x9a", + "\xc5\xb0", + "\xc3\x9c", + "\xc3\x9d", + "\xc5\xa2", + "\xc3\x9f", + "\xc5\x95", + "\xc3\xa1", + "\xc3\xa2", + "\xc4\x83", + "\xc3\xa4", + "\xc4\xba", + "\xc4\x87", + "\xc3\xa7", + "\xc4\x8d", + "\xc3\xa9", + "\xc4\x99", + "\xc3\xab", + "\xc4\x9b", + "\xc3\xad", + "\xc3\xae", + "\xc4\x8f", + "\xc4\x91", + "\xc5\x84", + "\xc5\x88", + "\xc3\xb3", + "\xc3\xb4", + "\xc5\x91", + "\xc3\xb6", + "\xc3\xb7", + "\xc5\x99", + "\xc5\xaf", + "\xc3\xba", + "\xc5\xb1", + "\xc3\xbc", + "\xc3\xbd", + "\xc5\xa3", + "\xcb\x99", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a4 => "\xa4", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000bb => "\xbb", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c4 => "\xc4", + 0x000000c7 => "\xc7", + 0x000000c9 => "\xc9", + 0x000000cb => "\xcb", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000da => "\xda", + 0x000000dc => "\xdc", + 0x000000dd => "\xdd", + 0x000000df => "\xdf", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e4 => "\xe4", + 0x000000e7 => "\xe7", + 0x000000e9 => "\xe9", + 0x000000eb => "\xeb", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000fa => "\xfa", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x00000102 => "\xc3", + 0x00000103 => "\xe3", + 0x00000104 => "\xa5", + 0x00000105 => "\xb9", + 0x00000106 => "\xc6", + 0x00000107 => "\xe6", + 0x0000010c => "\xc8", + 0x0000010d => "\xe8", + 0x0000010e => "\xcf", + 0x0000010f => "\xef", + 0x00000110 => "\xd0", + 0x00000111 => "\xf0", + 0x00000118 => "\xca", + 0x00000119 => "\xea", + 0x0000011a => "\xcc", + 0x0000011b => "\xec", + 0x00000139 => "\xc5", + 0x0000013a => "\xe5", + 0x0000013d => "\xbc", + 0x0000013e => "\xbe", + 0x00000141 => "\xa3", + 0x00000142 => "\xb3", + 0x00000143 => "\xd1", + 0x00000144 => "\xf1", + 0x00000147 => "\xd2", + 0x00000148 => "\xf2", + 0x00000150 => "\xd5", + 0x00000151 => "\xf5", + 0x00000154 => "\xc0", + 0x00000155 => "\xe0", + 0x00000158 => "\xd8", + 0x00000159 => "\xf8", + 0x0000015a => "\x8c", + 0x0000015b => "\x9c", + 0x0000015e => "\xaa", + 0x0000015f => "\xba", + 0x00000160 => "\x8a", + 0x00000161 => "\x9a", + 0x00000162 => "\xde", + 0x00000163 => "\xfe", + 0x00000164 => "\x8d", + 0x00000165 => "\x9d", + 0x0000016e => "\xd9", + 0x0000016f => "\xf9", + 0x00000170 => "\xdb", + 0x00000171 => "\xfb", + 0x00000179 => "\x8f", + 0x0000017a => "\x9f", + 0x0000017b => "\xaf", + 0x0000017c => "\xbf", + 0x0000017d => "\x8e", + 0x0000017e => "\x9e", + 0x000002c7 => "\xa1", + 0x000002d8 => "\xa2", + 0x000002d9 => "\xff", + 0x000002db => "\xb2", + 0x000002dd => "\xbd", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x000020ac => "\x80", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CP1250 - Conversion routines for CP1250 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CP1250. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: UNICODE 1.0 + alias MS-EE + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000020AC | EURO SIGN + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 89 | 00002030 | PER MILLE SIGN + 8A | 00000160 | LATIN CAPITAL LETTER S WITH CARON + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 0000015A | LATIN CAPITAL LETTER S WITH ACUTE + 8D | 00000164 | LATIN CAPITAL LETTER T WITH CARON + 8E | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + 8F | 00000179 | LATIN CAPITAL LETTER Z WITH ACUTE + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 99 | 00002122 | TRADE MARK SIGN + 9A | 00000161 | LATIN SMALL LETTER S WITH CARON + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C | 0000015B | LATIN SMALL LETTER S WITH ACUTE + 9D | 00000165 | LATIN SMALL LETTER T WITH CARON + 9E | 0000017E | LATIN SMALL LETTER Z WITH CARON + 9F | 0000017A | LATIN SMALL LETTER Z WITH ACUTE + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000002C7 | CARON (Mandarin Chinese third tone) + A2 | 000002D8 | BREVE + A3 | 00000141 | LATIN CAPITAL LETTER L WITH STROKE + A4 | 000000A4 | CURRENCY SIGN + A5 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000002DB | OGONEK + B3 | 00000142 | LATIN SMALL LETTER L WITH STROKE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + BA | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 0000013D | LATIN CAPITAL LETTER L WITH CARON + BD | 000002DD | DOUBLE ACUTE ACCENT + BE | 0000013E | LATIN SMALL LETTER L WITH CARON + BF | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + C0 | 00000154 | LATIN CAPITAL LETTER R WITH ACUTE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 00000102 | LATIN CAPITAL LETTER A WITH BREVE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 00000139 | LATIN CAPITAL LETTER L WITH ACUTE + C6 | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 0000011A | LATIN CAPITAL LETTER E WITH CARON + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 0000010E | LATIN CAPITAL LETTER D WITH CARON + D0 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + D1 | 00000143 | LATIN CAPITAL LETTER N WITH ACUTE + D2 | 00000147 | LATIN CAPITAL LETTER N WITH CARON + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 00000158 | LATIN CAPITAL LETTER R WITH CARON + D9 | 0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 00000162 | LATIN CAPITAL LETTER T WITH CEDILLA + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 00000155 | LATIN SMALL LETTER R WITH ACUTE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 00000103 | LATIN SMALL LETTER A WITH BREVE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 0000013A | LATIN SMALL LETTER L WITH ACUTE + E6 | 00000107 | LATIN SMALL LETTER C WITH ACUTE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 0000010D | LATIN SMALL LETTER C WITH CARON + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 00000119 | LATIN SMALL LETTER E WITH OGONEK + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 0000011B | LATIN SMALL LETTER E WITH CARON + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 0000010F | LATIN SMALL LETTER D WITH CARON + F0 | 00000111 | LATIN SMALL LETTER D WITH STROKE + F1 | 00000144 | LATIN SMALL LETTER N WITH ACUTE + F2 | 00000148 | LATIN SMALL LETTER N WITH CARON + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 00000159 | LATIN SMALL LETTER R WITH CARON + F9 | 0000016F | LATIN SMALL LETTER U WITH RING ABOVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 00000163 | LATIN SMALL LETTER T WITH CEDILLA + FF | 000002D9 | DOT ABOVE (Mandarin Chinese light tone) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CP1251.pm b/lib/Locale/RecodeData/CP1251.pm new file mode 100644 index 0000000..13476a6 --- /dev/null +++ b/lib/Locale/RecodeData/CP1251.pm @@ -0,0 +1,1139 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CP1251. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CP1251; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x040c, + 0x040b, + 0x040f, + 0x0452, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0xfffd, + 0x2122, + 0x0459, + 0x203a, + 0x045a, + 0x045c, + 0x045b, + 0x045f, + 0x00a0, + 0x040e, + 0x045e, + 0x0408, + 0x00a4, + 0x0490, + 0x00a6, + 0x00a7, + 0x0401, + 0x00a9, + 0x0404, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x0407, + 0x00b0, + 0x00b1, + 0x0406, + 0x0456, + 0x0491, + 0x00b5, + 0x00b6, + 0x00b7, + 0x0451, + 0x2116, + 0x0454, + 0x00bb, + 0x0458, + 0x0405, + 0x0455, + 0x0457, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd0\x82", + "\xd0\x83", + "\xe2\x80\x9a", + "\xd1\x93", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xe2\x82\xac", + "\xe2\x80\xb0", + "\xd0\x89", + "\xe2\x80\xb9", + "\xd0\x8a", + "\xd0\x8c", + "\xd0\x8b", + "\xd0\x8f", + "\xd1\x92", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xef\xbf\xbd", + "\xe2\x84\xa2", + "\xd1\x99", + "\xe2\x80\xba", + "\xd1\x9a", + "\xd1\x9c", + "\xd1\x9b", + "\xd1\x9f", + "\xc2\xa0", + "\xd0\x8e", + "\xd1\x9e", + "\xd0\x88", + "\xc2\xa4", + "\xd2\x90", + "\xc2\xa6", + "\xc2\xa7", + "\xd0\x81", + "\xc2\xa9", + "\xd0\x84", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xd0\x87", + "\xc2\xb0", + "\xc2\xb1", + "\xd0\x86", + "\xd1\x96", + "\xd2\x91", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xd1\x91", + "\xe2\x84\x96", + "\xd1\x94", + "\xc2\xbb", + "\xd1\x98", + "\xd0\x85", + "\xd1\x95", + "\xd1\x97", + "\xd0\x90", + "\xd0\x91", + "\xd0\x92", + "\xd0\x93", + "\xd0\x94", + "\xd0\x95", + "\xd0\x96", + "\xd0\x97", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\xa4", + "\xd0\xa5", + "\xd0\xa6", + "\xd0\xa7", + "\xd0\xa8", + "\xd0\xa9", + "\xd0\xaa", + "\xd0\xab", + "\xd0\xac", + "\xd0\xad", + "\xd0\xae", + "\xd0\xaf", + "\xd0\xb0", + "\xd0\xb1", + "\xd0\xb2", + "\xd0\xb3", + "\xd0\xb4", + "\xd0\xb5", + "\xd0\xb6", + "\xd0\xb7", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd1\x84", + "\xd1\x85", + "\xd1\x86", + "\xd1\x87", + "\xd1\x88", + "\xd1\x89", + "\xd1\x8a", + "\xd1\x8b", + "\xd1\x8c", + "\xd1\x8d", + "\xd1\x8e", + "\xd1\x8f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a4 => "\xa4", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000bb => "\xbb", + 0x00000401 => "\xa8", + 0x00000402 => "\x80", + 0x00000403 => "\x81", + 0x00000404 => "\xaa", + 0x00000405 => "\xbd", + 0x00000406 => "\xb2", + 0x00000407 => "\xaf", + 0x00000408 => "\xa3", + 0x00000409 => "\x8a", + 0x0000040a => "\x8c", + 0x0000040b => "\x8e", + 0x0000040c => "\x8d", + 0x0000040e => "\xa1", + 0x0000040f => "\x8f", + 0x00000410 => "\xc0", + 0x00000411 => "\xc1", + 0x00000412 => "\xc2", + 0x00000413 => "\xc3", + 0x00000414 => "\xc4", + 0x00000415 => "\xc5", + 0x00000416 => "\xc6", + 0x00000417 => "\xc7", + 0x00000418 => "\xc8", + 0x00000419 => "\xc9", + 0x0000041a => "\xca", + 0x0000041b => "\xcb", + 0x0000041c => "\xcc", + 0x0000041d => "\xcd", + 0x0000041e => "\xce", + 0x0000041f => "\xcf", + 0x00000420 => "\xd0", + 0x00000421 => "\xd1", + 0x00000422 => "\xd2", + 0x00000423 => "\xd3", + 0x00000424 => "\xd4", + 0x00000425 => "\xd5", + 0x00000426 => "\xd6", + 0x00000427 => "\xd7", + 0x00000428 => "\xd8", + 0x00000429 => "\xd9", + 0x0000042a => "\xda", + 0x0000042b => "\xdb", + 0x0000042c => "\xdc", + 0x0000042d => "\xdd", + 0x0000042e => "\xde", + 0x0000042f => "\xdf", + 0x00000430 => "\xe0", + 0x00000431 => "\xe1", + 0x00000432 => "\xe2", + 0x00000433 => "\xe3", + 0x00000434 => "\xe4", + 0x00000435 => "\xe5", + 0x00000436 => "\xe6", + 0x00000437 => "\xe7", + 0x00000438 => "\xe8", + 0x00000439 => "\xe9", + 0x0000043a => "\xea", + 0x0000043b => "\xeb", + 0x0000043c => "\xec", + 0x0000043d => "\xed", + 0x0000043e => "\xee", + 0x0000043f => "\xef", + 0x00000440 => "\xf0", + 0x00000441 => "\xf1", + 0x00000442 => "\xf2", + 0x00000443 => "\xf3", + 0x00000444 => "\xf4", + 0x00000445 => "\xf5", + 0x00000446 => "\xf6", + 0x00000447 => "\xf7", + 0x00000448 => "\xf8", + 0x00000449 => "\xf9", + 0x0000044a => "\xfa", + 0x0000044b => "\xfb", + 0x0000044c => "\xfc", + 0x0000044d => "\xfd", + 0x0000044e => "\xfe", + 0x0000044f => "\xff", + 0x00000451 => "\xb8", + 0x00000452 => "\x90", + 0x00000453 => "\x83", + 0x00000454 => "\xba", + 0x00000455 => "\xbe", + 0x00000456 => "\xb3", + 0x00000457 => "\xbf", + 0x00000458 => "\xbc", + 0x00000459 => "\x9a", + 0x0000045a => "\x9c", + 0x0000045b => "\x9e", + 0x0000045c => "\x9d", + 0x0000045e => "\xa2", + 0x0000045f => "\x9f", + 0x00000490 => "\xa5", + 0x00000491 => "\xb4", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x000020ac => "\x88", + 0x00002116 => "\xb9", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CP1251 - Conversion routines for CP1251 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CP1251. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: UNICODE 1.0 + alias MS-CYRL + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian) + 81 | 00000403 | CYRILLIC CAPITAL LETTER GJE + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 83 | 00000453 | CYRILLIC SMALL LETTER GJE + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 88 | 000020AC | EURO SIGN + 89 | 00002030 | PER MILLE SIGN + 8A | 00000409 | CYRILLIC CAPITAL LETTER LJE + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 0000040A | CYRILLIC CAPITAL LETTER NJE + 8D | 0000040C | CYRILLIC CAPITAL LETTER KJE + 8E | 0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) + 8F | 0000040F | CYRILLIC CAPITAL LETTER DZHE + 90 | 00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian) + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 99 | 00002122 | TRADE MARK SIGN + 9A | 00000459 | CYRILLIC SMALL LETTER LJE + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C | 0000045A | CYRILLIC SMALL LETTER NJE + 9D | 0000045C | CYRILLIC SMALL LETTER KJE + 9E | 0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian) + 9F | 0000045F | CYRILLIC SMALL LETTER DZHE + A0 | 000000A0 | NO-BREAK SPACE + A1 | 0000040E | CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) + A2 | 0000045E | CYRILLIC SMALL LETTER SHORT U (Byelorussian) + A3 | 00000408 | CYRILLIC CAPITAL LETTER JE + A4 | 000000A4 | CURRENCY SIGN + A5 | 00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 00000401 | CYRILLIC CAPITAL LETTER IO + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian) + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + B3 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + B4 | 00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 00000451 | CYRILLIC SMALL LETTER IO + B9 | 00002116 | NUMERO SIGN + BA | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 00000458 | CYRILLIC SMALL LETTER JE + BD | 00000405 | CYRILLIC CAPITAL LETTER DZE + BE | 00000455 | CYRILLIC SMALL LETTER DZE + BF | 00000457 | CYRILLIC SMALL LETTER YI (Ukrainian) + C0 | 00000410 | CYRILLIC CAPITAL LETTER A + C1 | 00000411 | CYRILLIC CAPITAL LETTER BE + C2 | 00000412 | CYRILLIC CAPITAL LETTER VE + C3 | 00000413 | CYRILLIC CAPITAL LETTER GHE + C4 | 00000414 | CYRILLIC CAPITAL LETTER DE + C5 | 00000415 | CYRILLIC CAPITAL LETTER IE + C6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + C7 | 00000417 | CYRILLIC CAPITAL LETTER ZE + C8 | 00000418 | CYRILLIC CAPITAL LETTER I + C9 | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + CA | 0000041A | CYRILLIC CAPITAL LETTER KA + CB | 0000041B | CYRILLIC CAPITAL LETTER EL + CC | 0000041C | CYRILLIC CAPITAL LETTER EM + CD | 0000041D | CYRILLIC CAPITAL LETTER EN + CE | 0000041E | CYRILLIC CAPITAL LETTER O + CF | 0000041F | CYRILLIC CAPITAL LETTER PE + D0 | 00000420 | CYRILLIC CAPITAL LETTER ER + D1 | 00000421 | CYRILLIC CAPITAL LETTER ES + D2 | 00000422 | CYRILLIC CAPITAL LETTER TE + D3 | 00000423 | CYRILLIC CAPITAL LETTER U + D4 | 00000424 | CYRILLIC CAPITAL LETTER EF + D5 | 00000425 | CYRILLIC CAPITAL LETTER HA + D6 | 00000426 | CYRILLIC CAPITAL LETTER TSE + D7 | 00000427 | CYRILLIC CAPITAL LETTER CHE + D8 | 00000428 | CYRILLIC CAPITAL LETTER SHA + D9 | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + DA | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + DB | 0000042B | CYRILLIC CAPITAL LETTER YERU + DC | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + DD | 0000042D | CYRILLIC CAPITAL LETTER E + DE | 0000042E | CYRILLIC CAPITAL LETTER YU + DF | 0000042F | CYRILLIC CAPITAL LETTER YA + E0 | 00000430 | CYRILLIC SMALL LETTER A + E1 | 00000431 | CYRILLIC SMALL LETTER BE + E2 | 00000432 | CYRILLIC SMALL LETTER VE + E3 | 00000433 | CYRILLIC SMALL LETTER GHE + E4 | 00000434 | CYRILLIC SMALL LETTER DE + E5 | 00000435 | CYRILLIC SMALL LETTER IE + E6 | 00000436 | CYRILLIC SMALL LETTER ZHE + E7 | 00000437 | CYRILLIC SMALL LETTER ZE + E8 | 00000438 | CYRILLIC SMALL LETTER I + E9 | 00000439 | CYRILLIC SMALL LETTER SHORT I + EA | 0000043A | CYRILLIC SMALL LETTER KA + EB | 0000043B | CYRILLIC SMALL LETTER EL + EC | 0000043C | CYRILLIC SMALL LETTER EM + ED | 0000043D | CYRILLIC SMALL LETTER EN + EE | 0000043E | CYRILLIC SMALL LETTER O + EF | 0000043F | CYRILLIC SMALL LETTER PE + F0 | 00000440 | CYRILLIC SMALL LETTER ER + F1 | 00000441 | CYRILLIC SMALL LETTER ES + F2 | 00000442 | CYRILLIC SMALL LETTER TE + F3 | 00000443 | CYRILLIC SMALL LETTER U + F4 | 00000444 | CYRILLIC SMALL LETTER EF + F5 | 00000445 | CYRILLIC SMALL LETTER HA + F6 | 00000446 | CYRILLIC SMALL LETTER TSE + F7 | 00000447 | CYRILLIC SMALL LETTER CHE + F8 | 00000448 | CYRILLIC SMALL LETTER SHA + F9 | 00000449 | CYRILLIC SMALL LETTER SHCHA + FA | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + FB | 0000044B | CYRILLIC SMALL LETTER YERU + FC | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + FD | 0000044D | CYRILLIC SMALL LETTER E + FE | 0000044E | CYRILLIC SMALL LETTER YU + FF | 0000044F | CYRILLIC SMALL LETTER YA + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CP1252.pm b/lib/Locale/RecodeData/CP1252.pm new file mode 100644 index 0000000..42726b7 --- /dev/null +++ b/lib/Locale/RecodeData/CP1252.pm @@ -0,0 +1,1131 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CP1252. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CP1252; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x20ac, + 0xfffd, + 0x201a, + 0x0192, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0x02c6, + 0x2030, + 0x0160, + 0x2039, + 0x0152, + 0xfffd, + 0x017d, + 0xfffd, + 0xfffd, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0x02dc, + 0x2122, + 0x0161, + 0x203a, + 0x0153, + 0xfffd, + 0x017e, + 0x0178, + 0x00a0, + 0x00a1, + 0x00a2, + 0x00a3, + 0x00a4, + 0x00a5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x00aa, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00af, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00b8, + 0x00b9, + 0x00ba, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0x00bf, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00d0, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x00d7, + 0x00d8, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x00dd, + 0x00de, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00f0, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00f7, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x00fd, + 0x00fe, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x82\xac", + "\xef\xbf\xbd", + "\xe2\x80\x9a", + "\xc6\x92", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xcb\x86", + "\xe2\x80\xb0", + "\xc5\xa0", + "\xe2\x80\xb9", + "\xc5\x92", + "\xef\xbf\xbd", + "\xc5\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xcb\x9c", + "\xe2\x84\xa2", + "\xc5\xa1", + "\xe2\x80\xba", + "\xc5\x93", + "\xef\xbf\xbd", + "\xc5\xbe", + "\xc5\xb8", + "\xc2\xa0", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc2\xaa", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc2\xb9", + "\xc2\xba", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xbf", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x90", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc3\x98", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x9d", + "\xc3\x9e", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb0", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbd", + "\xc3\xbe", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a1 => "\xa1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000aa => "\xaa", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000b9 => "\xb9", + 0x000000ba => "\xba", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000bf => "\xbf", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d0 => "\xd0", + 0x000000d1 => "\xd1", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d8 => "\xd8", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000dd => "\xdd", + 0x000000de => "\xde", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f0 => "\xf0", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x000000fe => "\xfe", + 0x000000ff => "\xff", + 0x00000152 => "\x8c", + 0x00000153 => "\x9c", + 0x00000160 => "\x8a", + 0x00000161 => "\x9a", + 0x00000178 => "\x9f", + 0x0000017d => "\x8e", + 0x0000017e => "\x9e", + 0x00000192 => "\x83", + 0x000002c6 => "\x88", + 0x000002dc => "\x98", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x000020ac => "\x80", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CP1252 - Conversion routines for CP1252 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CP1252. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: UNICODE 1.0 + alias MS-ANSI + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000020AC | EURO SIGN + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 83 | 00000192 | LATIN SMALL LETTER F WITH HOOK + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 88 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + 89 | 00002030 | PER MILLE SIGN + 8A | 00000160 | LATIN CAPITAL LETTER S WITH CARON + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 00000152 | LATIN CAPITAL LIGATURE OE + 8E | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 98 | 000002DC | SMALL TILDE + 99 | 00002122 | TRADE MARK SIGN + 9A | 00000161 | LATIN SMALL LETTER S WITH CARON + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C | 00000153 | LATIN SMALL LIGATURE OE + 9E | 0000017E | LATIN SMALL LETTER Z WITH CARON + 9F | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000AA | FEMININE ORDINAL INDICATOR + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000BA | MASCULINE ORDINAL INDICATOR + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CP1253.pm b/lib/Locale/RecodeData/CP1253.pm new file mode 100644 index 0000000..2b2bcc3 --- /dev/null +++ b/lib/Locale/RecodeData/CP1253.pm @@ -0,0 +1,1107 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CP1253. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CP1253; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x20ac, + 0xfffd, + 0x201a, + 0x0192, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0xfffd, + 0x2030, + 0xfffd, + 0x2039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0xfffd, + 0x2122, + 0xfffd, + 0x203a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a0, + 0x0385, + 0x0386, + 0x00a3, + 0x00a4, + 0x00a5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0xfffd, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x2015, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x0384, + 0x00b5, + 0x00b6, + 0x00b7, + 0x0388, + 0x0389, + 0x038a, + 0x00bb, + 0x038c, + 0x00bd, + 0x038e, + 0x038f, + 0x0390, + 0x0391, + 0x0392, + 0x0393, + 0x0394, + 0x0395, + 0x0396, + 0x0397, + 0x0398, + 0x0399, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x039e, + 0x039f, + 0x03a0, + 0x03a1, + 0xfffd, + 0x03a3, + 0x03a4, + 0x03a5, + 0x03a6, + 0x03a7, + 0x03a8, + 0x03a9, + 0x03aa, + 0x03ab, + 0x03ac, + 0x03ad, + 0x03ae, + 0x03af, + 0x03b0, + 0x03b1, + 0x03b2, + 0x03b3, + 0x03b4, + 0x03b5, + 0x03b6, + 0x03b7, + 0x03b8, + 0x03b9, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03be, + 0x03bf, + 0x03c0, + 0x03c1, + 0x03c2, + 0x03c3, + 0x03c4, + 0x03c5, + 0x03c6, + 0x03c7, + 0x03c8, + 0x03c9, + 0x03ca, + 0x03cb, + 0x03cc, + 0x03cd, + 0x03ce, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x82\xac", + "\xef\xbf\xbd", + "\xe2\x80\x9a", + "\xc6\x92", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xef\xbf\xbd", + "\xe2\x80\xb0", + "\xef\xbf\xbd", + "\xe2\x80\xb9", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xef\xbf\xbd", + "\xe2\x84\xa2", + "\xef\xbf\xbd", + "\xe2\x80\xba", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa0", + "\xce\x85", + "\xce\x86", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xef\xbf\xbd", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xe2\x80\x95", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xce\x84", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xce\x88", + "\xce\x89", + "\xce\x8a", + "\xc2\xbb", + "\xce\x8c", + "\xc2\xbd", + "\xce\x8e", + "\xce\x8f", + "\xce\x90", + "\xce\x91", + "\xce\x92", + "\xce\x93", + "\xce\x94", + "\xce\x95", + "\xce\x96", + "\xce\x97", + "\xce\x98", + "\xce\x99", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xce\x9e", + "\xce\x9f", + "\xce\xa0", + "\xce\xa1", + "\xef\xbf\xbd", + "\xce\xa3", + "\xce\xa4", + "\xce\xa5", + "\xce\xa6", + "\xce\xa7", + "\xce\xa8", + "\xce\xa9", + "\xce\xaa", + "\xce\xab", + "\xce\xac", + "\xce\xad", + "\xce\xae", + "\xce\xaf", + "\xce\xb0", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xce\xb4", + "\xce\xb5", + "\xce\xb6", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbe", + "\xce\xbf", + "\xcf\x80", + "\xcf\x81", + "\xcf\x82", + "\xcf\x83", + "\xcf\x84", + "\xcf\x85", + "\xcf\x86", + "\xcf\x87", + "\xcf\x88", + "\xcf\x89", + "\xcf\x8a", + "\xcf\x8b", + "\xcf\x8c", + "\xcf\x8d", + "\xcf\x8e", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000bb => "\xbb", + 0x000000bd => "\xbd", + 0x00000192 => "\x83", + 0x00000384 => "\xb4", + 0x00000385 => "\xa1", + 0x00000386 => "\xa2", + 0x00000388 => "\xb8", + 0x00000389 => "\xb9", + 0x0000038a => "\xba", + 0x0000038c => "\xbc", + 0x0000038e => "\xbe", + 0x0000038f => "\xbf", + 0x00000390 => "\xc0", + 0x00000391 => "\xc1", + 0x00000392 => "\xc2", + 0x00000393 => "\xc3", + 0x00000394 => "\xc4", + 0x00000395 => "\xc5", + 0x00000396 => "\xc6", + 0x00000397 => "\xc7", + 0x00000398 => "\xc8", + 0x00000399 => "\xc9", + 0x0000039a => "\xca", + 0x0000039b => "\xcb", + 0x0000039c => "\xcc", + 0x0000039d => "\xcd", + 0x0000039e => "\xce", + 0x0000039f => "\xcf", + 0x000003a0 => "\xd0", + 0x000003a1 => "\xd1", + 0x000003a3 => "\xd3", + 0x000003a4 => "\xd4", + 0x000003a5 => "\xd5", + 0x000003a6 => "\xd6", + 0x000003a7 => "\xd7", + 0x000003a8 => "\xd8", + 0x000003a9 => "\xd9", + 0x000003aa => "\xda", + 0x000003ab => "\xdb", + 0x000003ac => "\xdc", + 0x000003ad => "\xdd", + 0x000003ae => "\xde", + 0x000003af => "\xdf", + 0x000003b0 => "\xe0", + 0x000003b1 => "\xe1", + 0x000003b2 => "\xe2", + 0x000003b3 => "\xe3", + 0x000003b4 => "\xe4", + 0x000003b5 => "\xe5", + 0x000003b6 => "\xe6", + 0x000003b7 => "\xe7", + 0x000003b8 => "\xe8", + 0x000003b9 => "\xe9", + 0x000003ba => "\xea", + 0x000003bb => "\xeb", + 0x000003bc => "\xec", + 0x000003bd => "\xed", + 0x000003be => "\xee", + 0x000003bf => "\xef", + 0x000003c0 => "\xf0", + 0x000003c1 => "\xf1", + 0x000003c2 => "\xf2", + 0x000003c3 => "\xf3", + 0x000003c4 => "\xf4", + 0x000003c5 => "\xf5", + 0x000003c6 => "\xf6", + 0x000003c7 => "\xf7", + 0x000003c8 => "\xf8", + 0x000003c9 => "\xf9", + 0x000003ca => "\xfa", + 0x000003cb => "\xfb", + 0x000003cc => "\xfc", + 0x000003cd => "\xfd", + 0x000003ce => "\xfe", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002015 => "\xaf", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x000020ac => "\x80", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CP1253 - Conversion routines for CP1253 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CP1253. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: UNICODE 1.0 + alias MS-GREEK + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000020AC | EURO SIGN + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 83 | 00000192 | LATIN SMALL LETTER F WITH HOOK + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 89 | 00002030 | PER MILLE SIGN + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 99 | 00002122 | TRADE MARK SIGN + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000385 | GREEK DIALYTIKA TONOS + A2 | 00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 00002015 | HORIZONTAL BAR + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 00000384 | GREEK TONOS + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS + B9 | 00000389 | GREEK CAPITAL LETTER ETA WITH TONOS + BA | 0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS + BF | 0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS + C0 | 00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + C1 | 00000391 | GREEK CAPITAL LETTER ALPHA + C2 | 00000392 | GREEK CAPITAL LETTER BETA + C3 | 00000393 | GREEK CAPITAL LETTER GAMMA + C4 | 00000394 | GREEK CAPITAL LETTER DELTA + C5 | 00000395 | GREEK CAPITAL LETTER EPSILON + C6 | 00000396 | GREEK CAPITAL LETTER ZETA + C7 | 00000397 | GREEK CAPITAL LETTER ETA + C8 | 00000398 | GREEK CAPITAL LETTER THETA + C9 | 00000399 | GREEK CAPITAL LETTER IOTA + CA | 0000039A | GREEK CAPITAL LETTER KAPPA + CB | 0000039B | GREEK CAPITAL LETTER LAMDA + CC | 0000039C | GREEK CAPITAL LETTER MU + CD | 0000039D | GREEK CAPITAL LETTER NU + CE | 0000039E | GREEK CAPITAL LETTER XI + CF | 0000039F | GREEK CAPITAL LETTER OMICRON + D0 | 000003A0 | GREEK CAPITAL LETTER PI + D1 | 000003A1 | GREEK CAPITAL LETTER RHO + D3 | 000003A3 | GREEK CAPITAL LETTER SIGMA + D4 | 000003A4 | GREEK CAPITAL LETTER TAU + D5 | 000003A5 | GREEK CAPITAL LETTER UPSILON + D6 | 000003A6 | GREEK CAPITAL LETTER PHI + D7 | 000003A7 | GREEK CAPITAL LETTER CHI + D8 | 000003A8 | GREEK CAPITAL LETTER PSI + D9 | 000003A9 | GREEK CAPITAL LETTER OMEGA + DA | 000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + DB | 000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + DC | 000003AC | GREEK SMALL LETTER ALPHA WITH TONOS + DD | 000003AD | GREEK SMALL LETTER EPSILON WITH TONOS + DE | 000003AE | GREEK SMALL LETTER ETA WITH TONOS + DF | 000003AF | GREEK SMALL LETTER IOTA WITH TONOS + E0 | 000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + E1 | 000003B1 | GREEK SMALL LETTER ALPHA + E2 | 000003B2 | GREEK SMALL LETTER BETA + E3 | 000003B3 | GREEK SMALL LETTER GAMMA + E4 | 000003B4 | GREEK SMALL LETTER DELTA + E5 | 000003B5 | GREEK SMALL LETTER EPSILON + E6 | 000003B6 | GREEK SMALL LETTER ZETA + E7 | 000003B7 | GREEK SMALL LETTER ETA + E8 | 000003B8 | GREEK SMALL LETTER THETA + E9 | 000003B9 | GREEK SMALL LETTER IOTA + EA | 000003BA | GREEK SMALL LETTER KAPPA + EB | 000003BB | GREEK SMALL LETTER LAMDA + EC | 000003BC | GREEK SMALL LETTER MU + ED | 000003BD | GREEK SMALL LETTER NU + EE | 000003BE | GREEK SMALL LETTER XI + EF | 000003BF | GREEK SMALL LETTER OMICRON + F0 | 000003C0 | GREEK SMALL LETTER PI + F1 | 000003C1 | GREEK SMALL LETTER RHO + F2 | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + F3 | 000003C3 | GREEK SMALL LETTER SIGMA + F4 | 000003C4 | GREEK SMALL LETTER TAU + F5 | 000003C5 | GREEK SMALL LETTER UPSILON + F6 | 000003C6 | GREEK SMALL LETTER PHI + F7 | 000003C7 | GREEK SMALL LETTER CHI + F8 | 000003C8 | GREEK SMALL LETTER PSI + F9 | 000003C9 | GREEK SMALL LETTER OMEGA + FA | 000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA + FB | 000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA + FC | 000003CC | GREEK SMALL LETTER OMICRON WITH TONOS + FD | 000003CD | GREEK SMALL LETTER UPSILON WITH TONOS + FE | 000003CE | GREEK SMALL LETTER OMEGA WITH TONOS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CP1254.pm b/lib/Locale/RecodeData/CP1254.pm new file mode 100644 index 0000000..0664944 --- /dev/null +++ b/lib/Locale/RecodeData/CP1254.pm @@ -0,0 +1,1127 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CP1254. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CP1254; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x20ac, + 0xfffd, + 0x201a, + 0x0192, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0x02c6, + 0x2030, + 0x0160, + 0x2039, + 0x0152, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0x02dc, + 0x2122, + 0x0161, + 0x203a, + 0x0153, + 0xfffd, + 0xfffd, + 0x0178, + 0x00a0, + 0x00a1, + 0x00a2, + 0x00a3, + 0x00a4, + 0x00a5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x00aa, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00af, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00b8, + 0x00b9, + 0x00ba, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0x00bf, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0x011e, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x00d7, + 0x00d8, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x0130, + 0x015e, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x011f, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00f7, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x0131, + 0x015f, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x82\xac", + "\xef\xbf\xbd", + "\xe2\x80\x9a", + "\xc6\x92", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xcb\x86", + "\xe2\x80\xb0", + "\xc5\xa0", + "\xe2\x80\xb9", + "\xc5\x92", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xcb\x9c", + "\xe2\x84\xa2", + "\xc5\xa1", + "\xe2\x80\xba", + "\xc5\x93", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc5\xb8", + "\xc2\xa0", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc2\xaa", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc2\xb9", + "\xc2\xba", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xbf", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc4\x9e", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc3\x98", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc4\xb0", + "\xc5\x9e", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc4\x9f", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc4\xb1", + "\xc5\x9f", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a1 => "\xa1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000aa => "\xaa", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000b9 => "\xb9", + 0x000000ba => "\xba", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000bf => "\xbf", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d1 => "\xd1", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d8 => "\xd8", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000ff => "\xff", + 0x0000011e => "\xd0", + 0x0000011f => "\xf0", + 0x00000130 => "\xdd", + 0x00000131 => "\xfd", + 0x00000152 => "\x8c", + 0x00000153 => "\x9c", + 0x0000015e => "\xde", + 0x0000015f => "\xfe", + 0x00000160 => "\x8a", + 0x00000161 => "\x9a", + 0x00000178 => "\x9f", + 0x00000192 => "\x83", + 0x000002c6 => "\x88", + 0x000002dc => "\x98", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x000020ac => "\x80", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CP1254 - Conversion routines for CP1254 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CP1254. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: UNICODE 1.0 + alias MS-TURK + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000020AC | EURO SIGN + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 83 | 00000192 | LATIN SMALL LETTER F WITH HOOK + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 88 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + 89 | 00002030 | PER MILLE SIGN + 8A | 00000160 | LATIN CAPITAL LETTER S WITH CARON + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 00000152 | LATIN CAPITAL LIGATURE OE + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 98 | 000002DC | SMALL TILDE + 99 | 00002122 | TRADE MARK SIGN + 9A | 00000161 | LATIN SMALL LETTER S WITH CARON + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C | 00000153 | LATIN SMALL LIGATURE OE + 9F | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000AA | FEMININE ORDINAL INDICATOR + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000BA | MASCULINE ORDINAL INDICATOR + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 0000011E | LATIN CAPITAL LETTER G WITH BREVE + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE + DE | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER E WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 0000011F | LATIN SMALL LETTER G WITH BREVE + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 00000131 | LATIN SMALL LETTER DOTLESS I + FE | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CP1256.pm b/lib/Locale/RecodeData/CP1256.pm new file mode 100644 index 0000000..e973002 --- /dev/null +++ b/lib/Locale/RecodeData/CP1256.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CP1256. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CP1256; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x20ac, + 0x067e, + 0x201a, + 0x0192, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0x02c6, + 0x2030, + 0x0679, + 0x2039, + 0x0152, + 0x0686, + 0x0698, + 0x0688, + 0x06af, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0x06a9, + 0x2122, + 0x0691, + 0x203a, + 0x0153, + 0x200c, + 0x200d, + 0x06ba, + 0x00a0, + 0x060c, + 0x00a2, + 0x00a3, + 0x00a4, + 0x00a5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x06be, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00af, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00b8, + 0x00b9, + 0x061b, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0x061f, + 0x06c1, + 0x0621, + 0x0622, + 0x0623, + 0x0624, + 0x0625, + 0x0626, + 0x0627, + 0x0628, + 0x0629, + 0x062a, + 0x062b, + 0x062c, + 0x062d, + 0x062e, + 0x062f, + 0x0630, + 0x0631, + 0x0632, + 0x0633, + 0x0634, + 0x0635, + 0x0636, + 0x00d7, + 0x0637, + 0x0638, + 0x0639, + 0x063a, + 0x0640, + 0x0641, + 0x0642, + 0x0643, + 0x00e0, + 0x0644, + 0x00e2, + 0x0645, + 0x0646, + 0x0647, + 0x0648, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x0649, + 0x064a, + 0x00ee, + 0x00ef, + 0x064b, + 0x064c, + 0x064d, + 0x064e, + 0x00f4, + 0x064f, + 0x0650, + 0x00f7, + 0x0651, + 0x00f9, + 0x0652, + 0x00fb, + 0x00fc, + 0x200e, + 0x200f, + 0x06d2, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x82\xac", + "\xd9\xbe", + "\xe2\x80\x9a", + "\xc6\x92", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xcb\x86", + "\xe2\x80\xb0", + "\xd9\xb9", + "\xe2\x80\xb9", + "\xc5\x92", + "\xda\x86", + "\xda\x98", + "\xda\x88", + "\xda\xaf", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xda\xa9", + "\xe2\x84\xa2", + "\xda\x91", + "\xe2\x80\xba", + "\xc5\x93", + "\xe2\x80\x8c", + "\xe2\x80\x8d", + "\xda\xba", + "\xc2\xa0", + "\xd8\x8c", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xda\xbe", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc2\xb9", + "\xd8\x9b", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xd8\x9f", + "\xdb\x81", + "\xd8\xa1", + "\xd8\xa2", + "\xd8\xa3", + "\xd8\xa4", + "\xd8\xa5", + "\xd8\xa6", + "\xd8\xa7", + "\xd8\xa8", + "\xd8\xa9", + "\xd8\xaa", + "\xd8\xab", + "\xd8\xac", + "\xd8\xad", + "\xd8\xae", + "\xd8\xaf", + "\xd8\xb0", + "\xd8\xb1", + "\xd8\xb2", + "\xd8\xb3", + "\xd8\xb4", + "\xd8\xb5", + "\xd8\xb6", + "\xc3\x97", + "\xd8\xb7", + "\xd8\xb8", + "\xd8\xb9", + "\xd8\xba", + "\xd9\x80", + "\xd9\x81", + "\xd9\x82", + "\xd9\x83", + "\xc3\xa0", + "\xd9\x84", + "\xc3\xa2", + "\xd9\x85", + "\xd9\x86", + "\xd9\x87", + "\xd9\x88", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xd9\x89", + "\xd9\x8a", + "\xc3\xae", + "\xc3\xaf", + "\xd9\x8b", + "\xd9\x8c", + "\xd9\x8d", + "\xd9\x8e", + "\xc3\xb4", + "\xd9\x8f", + "\xd9\x90", + "\xc3\xb7", + "\xd9\x91", + "\xc3\xb9", + "\xd9\x92", + "\xc3\xbb", + "\xc3\xbc", + "\xe2\x80\x8e", + "\xe2\x80\x8f", + "\xdb\x92", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000b9 => "\xb9", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000d7 => "\xd7", + 0x000000e0 => "\xe0", + 0x000000e2 => "\xe2", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f4 => "\xf4", + 0x000000f7 => "\xf7", + 0x000000f9 => "\xf9", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x00000152 => "\x8c", + 0x00000153 => "\x9c", + 0x00000192 => "\x83", + 0x000002c6 => "\x88", + 0x0000060c => "\xa1", + 0x0000061b => "\xba", + 0x0000061f => "\xbf", + 0x00000621 => "\xc1", + 0x00000622 => "\xc2", + 0x00000623 => "\xc3", + 0x00000624 => "\xc4", + 0x00000625 => "\xc5", + 0x00000626 => "\xc6", + 0x00000627 => "\xc7", + 0x00000628 => "\xc8", + 0x00000629 => "\xc9", + 0x0000062a => "\xca", + 0x0000062b => "\xcb", + 0x0000062c => "\xcc", + 0x0000062d => "\xcd", + 0x0000062e => "\xce", + 0x0000062f => "\xcf", + 0x00000630 => "\xd0", + 0x00000631 => "\xd1", + 0x00000632 => "\xd2", + 0x00000633 => "\xd3", + 0x00000634 => "\xd4", + 0x00000635 => "\xd5", + 0x00000636 => "\xd6", + 0x00000637 => "\xd8", + 0x00000638 => "\xd9", + 0x00000639 => "\xda", + 0x0000063a => "\xdb", + 0x00000640 => "\xdc", + 0x00000641 => "\xdd", + 0x00000642 => "\xde", + 0x00000643 => "\xdf", + 0x00000644 => "\xe1", + 0x00000645 => "\xe3", + 0x00000646 => "\xe4", + 0x00000647 => "\xe5", + 0x00000648 => "\xe6", + 0x00000649 => "\xec", + 0x0000064a => "\xed", + 0x0000064b => "\xf0", + 0x0000064c => "\xf1", + 0x0000064d => "\xf2", + 0x0000064e => "\xf3", + 0x0000064f => "\xf5", + 0x00000650 => "\xf6", + 0x00000651 => "\xf8", + 0x00000652 => "\xfa", + 0x00000679 => "\x8a", + 0x0000067e => "\x81", + 0x00000686 => "\x8d", + 0x00000688 => "\x8f", + 0x00000691 => "\x9a", + 0x00000698 => "\x8e", + 0x000006a9 => "\x98", + 0x000006af => "\x90", + 0x000006ba => "\x9f", + 0x000006be => "\xaa", + 0x000006c1 => "\xc0", + 0x000006d2 => "\xff", + 0x0000200c => "\x9d", + 0x0000200d => "\x9e", + 0x0000200e => "\xfd", + 0x0000200f => "\xfe", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x000020ac => "\x80", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CP1256 - Conversion routines for CP1256 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CP1256. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: UNICODE 1.0 + alias MS-ARAB + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000020AC | EURO SIGN + 81 | 0000067E | ARABIC LETTER PEH + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 83 | 00000192 | LATIN SMALL LETTER F WITH HOOK + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 88 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + 89 | 00002030 | PER MILLE SIGN + 8A | 00000679 | ARABIC LETTER TTEH + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 00000152 | LATIN CAPITAL LIGATURE OE + 8D | 00000686 | ARABIC LETTER TCHEH + 8E | 00000698 | ARABIC LETTER JEH + 8F | 00000688 | ARABIC LETTER DDAL + 90 | 000006AF | ARABIC LETTER GAF + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 98 | 000006A9 | ARABIC LETTER KEHEH + 99 | 00002122 | TRADE MARK SIGN + 9A | 00000691 | ARABIC LETTER RREH + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C | 00000153 | LATIN SMALL LIGATURE OE + 9D | 0000200C | ZERO WIDTH NON-JOINER + 9E | 0000200D | ZERO WIDTH JOINER + 9F | 000006BA | ARABIC LETTER NOON + A0 | 000000A0 | NO-BREAK SPACE + A1 | 0000060C | ARABIC COMMA + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000006BE | ARABIC LETTER HEH DOACHASHMEE + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 0000061B | ARABIC SEMICOLON + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 0000061F | ARABIC QUESTION MARK + C0 | 000006C1 | ARABIC LETTER HEH GOAL + C1 | 00000621 | ARABIC LETTER HAMZA + C2 | 00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE + C3 | 00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE + C4 | 00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE + C5 | 00000625 | ARABIC LETTER ALEF WITH HAMZA BELOW + C6 | 00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE + C7 | 00000627 | ARABIC LETTER ALEF + C8 | 00000628 | ARABIC LETTER BEH + C9 | 00000629 | ARABIC LETTER TEH MARBUTA + CA | 0000062A | ARABIC LETTER TEH + CB | 0000062B | ARABIC LETTER THEH + CC | 0000062C | ARABIC LETTER JEEM + CD | 0000062D | ARABIC LETTER HAH + CE | 0000062E | ARABIC LETTER KHAH + CF | 0000062F | ARABIC LETTER DAL + D0 | 00000630 | ARABIC LETTER THAL + D1 | 00000631 | ARABIC LETTER REH + D2 | 00000632 | ARABIC LETTER ZAIN + D3 | 00000633 | ARABIC LETTER SEEN + D4 | 00000634 | ARABIC LETTER SHEEN + D5 | 00000635 | ARABIC LETTER SAD + D6 | 00000636 | ARABIC LETTER DAD + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 00000637 | ARABIC LETTER TAH + D9 | 00000638 | ARABIC LETTER ZAH + DA | 00000639 | ARABIC LETTER AIN + DB | 0000063A | ARABIC LETTER GHAIN + DC | 00000640 | ARABIC TATWEEL + DD | 00000641 | ARABIC LETTER FEH + DE | 00000642 | ARABIC LETTER QAF + DF | 00000643 | ARABIC LETTER KAF + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 00000644 | ARABIC LETTER LAM + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 00000645 | ARABIC LETTER MEEM + E4 | 00000646 | ARABIC LETTER NOON + E5 | 00000647 | ARABIC LETTER HEH + E6 | 00000648 | ARABIC LETTER WAW + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 00000649 | ARABIC LETTER ALEF MAKSURA + ED | 0000064A | ARABIC LETTER YEH + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 0000064B | ARABIC FATHATAN + F1 | 0000064C | ARABIC DAMMATAN + F2 | 0000064D | ARABIC KASRATAN + F3 | 0000064E | ARABIC FATHA + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 0000064F | ARABIC DAMMA + F6 | 00000650 | ARABIC KASRA + F7 | 000000F7 | DIVISION SIGN + F8 | 00000651 | ARABIC SHADDA + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 00000652 | ARABIC SUKUN + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 0000200E | LEFT-TO-RIGHT MARK + FE | 0000200F | RIGHT-TO-LEFT MARK + FF | 000006D2 | ARABIC LETTER YEH BARREE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CP1257.pm b/lib/Locale/RecodeData/CP1257.pm new file mode 100644 index 0000000..a5aadf0 --- /dev/null +++ b/lib/Locale/RecodeData/CP1257.pm @@ -0,0 +1,1116 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CP1257. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CP1257; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x20ac, + 0xfffd, + 0x201a, + 0xfffd, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0xfffd, + 0x2030, + 0xfffd, + 0x2039, + 0xfffd, + 0x00a8, + 0x02c7, + 0x00b8, + 0xfffd, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0xfffd, + 0x2122, + 0xfffd, + 0x203a, + 0xfffd, + 0x00af, + 0x02db, + 0xfffd, + 0x00a0, + 0xfffd, + 0x00a2, + 0x00a3, + 0x00a4, + 0xfffd, + 0x00a6, + 0x00a7, + 0x00d8, + 0x00a9, + 0x0156, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00c6, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00f8, + 0x00b9, + 0x0157, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0x00e6, + 0x0104, + 0x012e, + 0x0100, + 0x0106, + 0x00c4, + 0x00c5, + 0x0118, + 0x0112, + 0x010c, + 0x00c9, + 0x0179, + 0x0116, + 0x0122, + 0x0136, + 0x012a, + 0x013b, + 0x0160, + 0x0143, + 0x0145, + 0x00d3, + 0x014c, + 0x00d5, + 0x00d6, + 0x00d7, + 0x0172, + 0x0141, + 0x015a, + 0x016a, + 0x00dc, + 0x017b, + 0x017d, + 0x00df, + 0x0105, + 0x012f, + 0x0101, + 0x0107, + 0x00e4, + 0x00e5, + 0x0119, + 0x0113, + 0x010d, + 0x00e9, + 0x017a, + 0x0117, + 0x0123, + 0x0137, + 0x012b, + 0x013c, + 0x0161, + 0x0144, + 0x0146, + 0x00f3, + 0x014d, + 0x00f5, + 0x00f6, + 0x00f7, + 0x0173, + 0x0142, + 0x015b, + 0x016b, + 0x00fc, + 0x017c, + 0x017e, + 0x02d9, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x82\xac", + "\xef\xbf\xbd", + "\xe2\x80\x9a", + "\xef\xbf\xbd", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xef\xbf\xbd", + "\xe2\x80\xb0", + "\xef\xbf\xbd", + "\xe2\x80\xb9", + "\xef\xbf\xbd", + "\xc2\xa8", + "\xcb\x87", + "\xc2\xb8", + "\xef\xbf\xbd", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xef\xbf\xbd", + "\xe2\x84\xa2", + "\xef\xbf\xbd", + "\xe2\x80\xba", + "\xef\xbf\xbd", + "\xc2\xaf", + "\xcb\x9b", + "\xef\xbf\xbd", + "\xc2\xa0", + "\xef\xbf\xbd", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xef\xbf\xbd", + "\xc2\xa6", + "\xc2\xa7", + "\xc3\x98", + "\xc2\xa9", + "\xc5\x96", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc3\x86", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc3\xb8", + "\xc2\xb9", + "\xc5\x97", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc3\xa6", + "\xc4\x84", + "\xc4\xae", + "\xc4\x80", + "\xc4\x86", + "\xc3\x84", + "\xc3\x85", + "\xc4\x98", + "\xc4\x92", + "\xc4\x8c", + "\xc3\x89", + "\xc5\xb9", + "\xc4\x96", + "\xc4\xa2", + "\xc4\xb6", + "\xc4\xaa", + "\xc4\xbb", + "\xc5\xa0", + "\xc5\x83", + "\xc5\x85", + "\xc3\x93", + "\xc5\x8c", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc5\xb2", + "\xc5\x81", + "\xc5\x9a", + "\xc5\xaa", + "\xc3\x9c", + "\xc5\xbb", + "\xc5\xbd", + "\xc3\x9f", + "\xc4\x85", + "\xc4\xaf", + "\xc4\x81", + "\xc4\x87", + "\xc3\xa4", + "\xc3\xa5", + "\xc4\x99", + "\xc4\x93", + "\xc4\x8d", + "\xc3\xa9", + "\xc5\xba", + "\xc4\x97", + "\xc4\xa3", + "\xc4\xb7", + "\xc4\xab", + "\xc4\xbc", + "\xc5\xa1", + "\xc5\x84", + "\xc5\x86", + "\xc3\xb3", + "\xc5\x8d", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc5\xb3", + "\xc5\x82", + "\xc5\x9b", + "\xc5\xab", + "\xc3\xbc", + "\xc5\xbc", + "\xc5\xbe", + "\xcb\x99", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\x8d", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\x9d", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\x8f", + 0x000000b9 => "\xb9", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xaf", + 0x000000c9 => "\xc9", + 0x000000d3 => "\xd3", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d8 => "\xa8", + 0x000000dc => "\xdc", + 0x000000df => "\xdf", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xbf", + 0x000000e9 => "\xe9", + 0x000000f3 => "\xf3", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xb8", + 0x000000fc => "\xfc", + 0x00000100 => "\xc2", + 0x00000101 => "\xe2", + 0x00000104 => "\xc0", + 0x00000105 => "\xe0", + 0x00000106 => "\xc3", + 0x00000107 => "\xe3", + 0x0000010c => "\xc8", + 0x0000010d => "\xe8", + 0x00000112 => "\xc7", + 0x00000113 => "\xe7", + 0x00000116 => "\xcb", + 0x00000117 => "\xeb", + 0x00000118 => "\xc6", + 0x00000119 => "\xe6", + 0x00000122 => "\xcc", + 0x00000123 => "\xec", + 0x0000012a => "\xce", + 0x0000012b => "\xee", + 0x0000012e => "\xc1", + 0x0000012f => "\xe1", + 0x00000136 => "\xcd", + 0x00000137 => "\xed", + 0x0000013b => "\xcf", + 0x0000013c => "\xef", + 0x00000141 => "\xd9", + 0x00000142 => "\xf9", + 0x00000143 => "\xd1", + 0x00000144 => "\xf1", + 0x00000145 => "\xd2", + 0x00000146 => "\xf2", + 0x0000014c => "\xd4", + 0x0000014d => "\xf4", + 0x00000156 => "\xaa", + 0x00000157 => "\xba", + 0x0000015a => "\xda", + 0x0000015b => "\xfa", + 0x00000160 => "\xd0", + 0x00000161 => "\xf0", + 0x0000016a => "\xdb", + 0x0000016b => "\xfb", + 0x00000172 => "\xd8", + 0x00000173 => "\xf8", + 0x00000179 => "\xca", + 0x0000017a => "\xea", + 0x0000017b => "\xdd", + 0x0000017c => "\xfd", + 0x0000017d => "\xde", + 0x0000017e => "\xfe", + 0x000002c7 => "\x8e", + 0x000002d9 => "\xff", + 0x000002db => "\x9e", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x000020ac => "\x80", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CP1257 - Conversion routines for CP1257 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CP1257. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: CEN/TC304 N283 + alias WINBALTRIM + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000020AC | EURO SIGN + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 89 | 00002030 | PER MILLE SIGN + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8D | 000000A8 | DIAERESIS + 8E | 000002C7 | CARON (Mandarin Chinese third tone) + 8F | 000000B8 | CEDILLA + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 99 | 00002122 | TRADE MARK SIGN + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9D | 000000AF | MACRON + 9E | 000002DB | OGONEK + A0 | 000000A0 | NO-BREAK SPACE + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00000156 | LATIN CAPITAL LETTER R WITH CEDILLA + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000C6 | LATIN CAPITAL LETTER AE + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 00000157 | LATIN SMALL LETTER R WITH CEDILLA + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 000000E6 | LATIN SMALL LETTER AE + C0 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + C1 | 0000012E | LATIN CAPITAL LETTER I WITH OGONEK + C2 | 00000100 | LATIN CAPITAL LETTER A WITH MACRON + C3 | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK + C7 | 00000112 | LATIN CAPITAL LETTER E WITH MACRON + C8 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 00000179 | LATIN CAPITAL LETTER Z WITH ACUTE + CB | 00000116 | LATIN CAPITAL LETTER E WITH DOT ABOVE + CC | 00000122 | LATIN CAPITAL LETTER G WITH CEDILLA + CD | 00000136 | LATIN CAPITAL LETTER K WITH CEDILLA + CE | 0000012A | LATIN CAPITAL LETTER I WITH MACRON + CF | 0000013B | LATIN CAPITAL LETTER L WITH CEDILLA + D0 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + D1 | 00000143 | LATIN CAPITAL LETTER N WITH ACUTE + D2 | 00000145 | LATIN CAPITAL LETTER N WITH CEDILLA + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 0000014C | LATIN CAPITAL LETTER O WITH MACRON + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 00000172 | LATIN CAPITAL LETTER U WITH OGONEK + D9 | 00000141 | LATIN CAPITAL LETTER L WITH STROKE + DA | 0000015A | LATIN CAPITAL LETTER S WITH ACUTE + DB | 0000016A | LATIN CAPITAL LETTER U WITH MACRON + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + DE | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + E1 | 0000012F | LATIN SMALL LETTER I WITH OGONEK + E2 | 00000101 | LATIN SMALL LETTER A WITH MACRON + E3 | 00000107 | LATIN SMALL LETTER C WITH ACUTE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 00000119 | LATIN SMALL LETTER E WITH OGONEK + E7 | 00000113 | LATIN SMALL LETTER E WITH MACRON + E8 | 0000010D | LATIN SMALL LETTER C WITH CARON + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 0000017A | LATIN SMALL LETTER Z WITH ACUTE + EB | 00000117 | LATIN SMALL LETTER E WITH DOT ABOVE + EC | 00000123 | LATIN SMALL LETTER G WITH CEDILLA + ED | 00000137 | LATIN SMALL LETTER K WITH CEDILLA + EE | 0000012B | LATIN SMALL LETTER I WITH MACRON + EF | 0000013C | LATIN SMALL LETTER L WITH CEDILLA + F0 | 00000161 | LATIN SMALL LETTER S WITH CARON + F1 | 00000144 | LATIN SMALL LETTER N WITH ACUTE + F2 | 00000146 | LATIN SMALL LETTER N WITH CEDILLA + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 0000014D | LATIN SMALL LETTER O WITH MACRON + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 00000173 | LATIN SMALL LETTER U WITH OGONEK + F9 | 00000142 | LATIN SMALL LETTER L WITH STROKE + FA | 0000015B | LATIN SMALL LETTER S WITH ACUTE + FB | 0000016B | LATIN SMALL LETTER U WITH MACRON + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + FE | 0000017E | LATIN SMALL LETTER Z WITH CARON + FF | 000002D9 | DOT ABOVE (Mandarin Chinese light tone) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CSN_369103.pm b/lib/Locale/RecodeData/CSN_369103.pm new file mode 100644 index 0000000..c4500d9 --- /dev/null +++ b/lib/Locale/RecodeData/CSN_369103.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CSN_369103. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CSN_369103; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 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, + 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, + 0x0104, + 0x02d8, + 0x0141, + 0x0024, + 0x013d, + 0x015a, + 0x00a7, + 0x00a8, + 0x0160, + 0x015e, + 0x0164, + 0x0179, + 0x00ad, + 0x017d, + 0x017b, + 0x00b0, + 0x0105, + 0x02db, + 0x0142, + 0x00b4, + 0x013e, + 0x015b, + 0x02c7, + 0x00b8, + 0x0161, + 0x015f, + 0x0165, + 0x017a, + 0x02dd, + 0x017e, + 0x017c, + 0x0154, + 0x00c1, + 0x00c2, + 0x0102, + 0x00c4, + 0x0139, + 0x0106, + 0x00c7, + 0x010c, + 0x00c9, + 0x0118, + 0x00cb, + 0x011a, + 0x00cd, + 0x00ce, + 0x010e, + 0x0110, + 0x0143, + 0x0147, + 0x00d3, + 0x00d4, + 0x0150, + 0x00d6, + 0x00d7, + 0x0158, + 0x016e, + 0x00da, + 0x0170, + 0x00dc, + 0x00dd, + 0x0162, + 0x00df, + 0x0155, + 0x00e1, + 0x00e2, + 0x0103, + 0x00e4, + 0x013a, + 0x0107, + 0x00e7, + 0x010d, + 0x00e9, + 0x0119, + 0x00eb, + 0x011b, + 0x00ed, + 0x00ee, + 0x010f, + 0x0111, + 0x0144, + 0x0148, + 0x00f3, + 0x00f4, + 0x0151, + 0x00f6, + 0x00f7, + 0x0159, + 0x016f, + 0x00fa, + 0x0171, + 0x00fc, + 0x00fd, + 0x0163, + 0x02d9, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\xc2\xa4", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc4\x84", + "\xcb\x98", + "\xc5\x81", + "\x24", + "\xc4\xbd", + "\xc5\x9a", + "\xc2\xa7", + "\xc2\xa8", + "\xc5\xa0", + "\xc5\x9e", + "\xc5\xa4", + "\xc5\xb9", + "\xc2\xad", + "\xc5\xbd", + "\xc5\xbb", + "\xc2\xb0", + "\xc4\x85", + "\xcb\x9b", + "\xc5\x82", + "\xc2\xb4", + "\xc4\xbe", + "\xc5\x9b", + "\xcb\x87", + "\xc2\xb8", + "\xc5\xa1", + "\xc5\x9f", + "\xc5\xa5", + "\xc5\xba", + "\xcb\x9d", + "\xc5\xbe", + "\xc5\xbc", + "\xc5\x94", + "\xc3\x81", + "\xc3\x82", + "\xc4\x82", + "\xc3\x84", + "\xc4\xb9", + "\xc4\x86", + "\xc3\x87", + "\xc4\x8c", + "\xc3\x89", + "\xc4\x98", + "\xc3\x8b", + "\xc4\x9a", + "\xc3\x8d", + "\xc3\x8e", + "\xc4\x8e", + "\xc4\x90", + "\xc5\x83", + "\xc5\x87", + "\xc3\x93", + "\xc3\x94", + "\xc5\x90", + "\xc3\x96", + "\xc3\x97", + "\xc5\x98", + "\xc5\xae", + "\xc3\x9a", + "\xc5\xb0", + "\xc3\x9c", + "\xc3\x9d", + "\xc5\xa2", + "\xc3\x9f", + "\xc5\x95", + "\xc3\xa1", + "\xc3\xa2", + "\xc4\x83", + "\xc3\xa4", + "\xc4\xba", + "\xc4\x87", + "\xc3\xa7", + "\xc4\x8d", + "\xc3\xa9", + "\xc4\x99", + "\xc3\xab", + "\xc4\x9b", + "\xc3\xad", + "\xc3\xae", + "\xc4\x8f", + "\xc4\x91", + "\xc5\x84", + "\xc5\x88", + "\xc3\xb3", + "\xc3\xb4", + "\xc5\x91", + "\xc3\xb6", + "\xc3\xb7", + "\xc5\x99", + "\xc5\xaf", + "\xc3\xba", + "\xc5\xb1", + "\xc3\xbc", + "\xc3\xbd", + "\xc5\xa3", + "\xcb\x99", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\xa4", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a4 => "\x24", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000ad => "\xad", + 0x000000b0 => "\xb0", + 0x000000b4 => "\xb4", + 0x000000b8 => "\xb8", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c4 => "\xc4", + 0x000000c7 => "\xc7", + 0x000000c9 => "\xc9", + 0x000000cb => "\xcb", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000da => "\xda", + 0x000000dc => "\xdc", + 0x000000dd => "\xdd", + 0x000000df => "\xdf", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e4 => "\xe4", + 0x000000e7 => "\xe7", + 0x000000e9 => "\xe9", + 0x000000eb => "\xeb", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000fa => "\xfa", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x00000102 => "\xc3", + 0x00000103 => "\xe3", + 0x00000104 => "\xa1", + 0x00000105 => "\xb1", + 0x00000106 => "\xc6", + 0x00000107 => "\xe6", + 0x0000010c => "\xc8", + 0x0000010d => "\xe8", + 0x0000010e => "\xcf", + 0x0000010f => "\xef", + 0x00000110 => "\xd0", + 0x00000111 => "\xf0", + 0x00000118 => "\xca", + 0x00000119 => "\xea", + 0x0000011a => "\xcc", + 0x0000011b => "\xec", + 0x00000139 => "\xc5", + 0x0000013a => "\xe5", + 0x0000013d => "\xa5", + 0x0000013e => "\xb5", + 0x00000141 => "\xa3", + 0x00000142 => "\xb3", + 0x00000143 => "\xd1", + 0x00000144 => "\xf1", + 0x00000147 => "\xd2", + 0x00000148 => "\xf2", + 0x00000150 => "\xd5", + 0x00000151 => "\xf5", + 0x00000154 => "\xc0", + 0x00000155 => "\xe0", + 0x00000158 => "\xd8", + 0x00000159 => "\xf8", + 0x0000015a => "\xa6", + 0x0000015b => "\xb6", + 0x0000015e => "\xaa", + 0x0000015f => "\xba", + 0x00000160 => "\xa9", + 0x00000161 => "\xb9", + 0x00000162 => "\xde", + 0x00000163 => "\xfe", + 0x00000164 => "\xab", + 0x00000165 => "\xbb", + 0x0000016e => "\xd9", + 0x0000016f => "\xf9", + 0x00000170 => "\xdb", + 0x00000171 => "\xfb", + 0x00000179 => "\xac", + 0x0000017a => "\xbc", + 0x0000017b => "\xaf", + 0x0000017c => "\xbf", + 0x0000017d => "\xae", + 0x0000017e => "\xbe", + 0x000002c7 => "\xb7", + 0x000002d8 => "\xa2", + 0x000002d9 => "\xff", + 0x000002db => "\xb2", + 0x000002dd => "\xbd", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CSN_369103 - Conversion routines for CSN_369103 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CSN_369103. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: ECMA registry + alias ISO-IR-139 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 000000A4 | CURRENCY SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + A2 | 000002D8 | BREVE + A3 | 00000141 | LATIN CAPITAL LETTER L WITH STROKE + A4 | 00000024 | DOLLAR SIGN + A5 | 0000013D | LATIN CAPITAL LETTER L WITH CARON + A6 | 0000015A | LATIN CAPITAL LETTER S WITH ACUTE + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + AA | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + AB | 00000164 | LATIN CAPITAL LETTER T WITH CARON + AC | 00000179 | LATIN CAPITAL LETTER Z WITH ACUTE + AD | 000000AD | SOFT HYPHEN + AE | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + AF | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + B0 | 000000B0 | DEGREE SIGN + B1 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + B2 | 000002DB | OGONEK + B3 | 00000142 | LATIN SMALL LETTER L WITH STROKE + B4 | 000000B4 | ACUTE ACCENT + B5 | 0000013E | LATIN SMALL LETTER L WITH CARON + B6 | 0000015B | LATIN SMALL LETTER S WITH ACUTE + B7 | 000002C7 | CARON (Mandarin Chinese third tone) + B8 | 000000B8 | CEDILLA + B9 | 00000161 | LATIN SMALL LETTER S WITH CARON + BA | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + BB | 00000165 | LATIN SMALL LETTER T WITH CARON + BC | 0000017A | LATIN SMALL LETTER Z WITH ACUTE + BD | 000002DD | DOUBLE ACUTE ACCENT + BE | 0000017E | LATIN SMALL LETTER Z WITH CARON + BF | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + C0 | 00000154 | LATIN CAPITAL LETTER R WITH ACUTE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 00000102 | LATIN CAPITAL LETTER A WITH BREVE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 00000139 | LATIN CAPITAL LETTER L WITH ACUTE + C6 | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 0000011A | LATIN CAPITAL LETTER E WITH CARON + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 0000010E | LATIN CAPITAL LETTER D WITH CARON + D0 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + D1 | 00000143 | LATIN CAPITAL LETTER N WITH ACUTE + D2 | 00000147 | LATIN CAPITAL LETTER N WITH CARON + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 00000158 | LATIN CAPITAL LETTER R WITH CARON + D9 | 0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 00000162 | LATIN CAPITAL LETTER T WITH CEDILLA + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 00000155 | LATIN SMALL LETTER R WITH ACUTE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 00000103 | LATIN SMALL LETTER A WITH BREVE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 0000013A | LATIN SMALL LETTER L WITH ACUTE + E6 | 00000107 | LATIN SMALL LETTER C WITH ACUTE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 0000010D | LATIN SMALL LETTER C WITH CARON + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 00000119 | LATIN SMALL LETTER E WITH OGONEK + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 0000011B | LATIN SMALL LETTER E WITH CARON + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 0000010F | LATIN SMALL LETTER D WITH CARON + F0 | 00000111 | LATIN SMALL LETTER D WITH STROKE + F1 | 00000144 | LATIN SMALL LETTER N WITH ACUTE + F2 | 00000148 | LATIN SMALL LETTER N WITH CARON + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 00000159 | LATIN SMALL LETTER R WITH CARON + F9 | 0000016F | LATIN SMALL LETTER U WITH RING ABOVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 00000163 | LATIN SMALL LETTER T WITH CEDILLA + FF | 000002D9 | DOT ABOVE (Mandarin Chinese light tone) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/CWI.pm b/lib/Locale/RecodeData/CWI.pm new file mode 100644 index 0000000..889a4a9 --- /dev/null +++ b/lib/Locale/RecodeData/CWI.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for CWI. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::CWI; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e5, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ef, + 0x00ee, + 0x00cd, + 0x00c4, + 0x00c1, + 0x00c9, + 0x00e6, + 0x00c6, + 0x0151, + 0x00f6, + 0x00d3, + 0x0171, + 0x00da, + 0x0170, + 0x00d6, + 0x00dc, + 0x00a2, + 0x00a3, + 0x00a5, + 0x20a7, + 0xe01f, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00f1, + 0x00d1, + 0x00aa, + 0x0150, + 0x00bf, + 0x2310, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x2561, + 0x2562, + 0x2556, + 0x2555, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x255c, + 0x255b, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x255e, + 0x255f, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x2567, + 0x2568, + 0x2564, + 0x2565, + 0x2559, + 0x2558, + 0x2552, + 0x2553, + 0x256b, + 0x256a, + 0x2518, + 0x250c, + 0x2588, + 0x2584, + 0x258c, + 0x2590, + 0x2580, + 0x03b1, + 0x03b2, + 0x0393, + 0x03c0, + 0x03a3, + 0x03c3, + 0x03bc, + 0x03c4, + 0x03a6, + 0x0398, + 0x03a9, + 0x03b4, + 0x221e, + 0x2205, + 0x03b5, + 0x2229, + 0x2261, + 0x00b1, + 0x2265, + 0x2264, + 0x2320, + 0x2321, + 0x00f7, + 0x2248, + 0x2218, + 0x00b7, + 0x2022, + 0x221a, + 0x207f, + 0x00b2, + 0x25a0, + 0x00a0, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xaf", + "\xc3\xae", + "\xc3\x8d", + "\xc3\x84", + "\xc3\x81", + "\xc3\x89", + "\xc3\xa6", + "\xc3\x86", + "\xc5\x91", + "\xc3\xb6", + "\xc3\x93", + "\xc5\xb1", + "\xc3\x9a", + "\xc5\xb0", + "\xc3\x96", + "\xc3\x9c", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xe2\x82\xa7", + "\xee\x80\x9f", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xb1", + "\xc3\x91", + "\xc2\xaa", + "\xc5\x90", + "\xc2\xbf", + "\xe2\x8c\x90", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xe2\x95\xa1", + "\xe2\x95\xa2", + "\xe2\x95\x96", + "\xe2\x95\x95", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xe2\x95\x9c", + "\xe2\x95\x9b", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa4", + "\xe2\x95\xa5", + "\xe2\x95\x99", + "\xe2\x95\x98", + "\xe2\x95\x92", + "\xe2\x95\x93", + "\xe2\x95\xab", + "\xe2\x95\xaa", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x80", + "\xce\xb1", + "\xce\xb2", + "\xce\x93", + "\xcf\x80", + "\xce\xa3", + "\xcf\x83", + "\xce\xbc", + "\xcf\x84", + "\xce\xa6", + "\xce\x98", + "\xce\xa9", + "\xce\xb4", + "\xe2\x88\x9e", + "\xe2\x88\x85", + "\xce\xb5", + "\xe2\x88\xa9", + "\xe2\x89\xa1", + "\xc2\xb1", + "\xe2\x89\xa5", + "\xe2\x89\xa4", + "\xe2\x8c\xa0", + "\xe2\x8c\xa1", + "\xc3\xb7", + "\xe2\x89\x88", + "\xe2\x88\x98", + "\xc2\xb7", + "\xe2\x80\xa2", + "\xe2\x88\x9a", + "\xe2\x81\xbf", + "\xc2\xb2", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a1 => "\xad", + 0x000000a2 => "\x9b", + 0x000000a3 => "\x9c", + 0x000000a5 => "\x9d", + 0x000000aa => "\xa6", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b7 => "\xf9", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000bf => "\xa8", + 0x000000c1 => "\x8f", + 0x000000c4 => "\x8e", + 0x000000c6 => "\x92", + 0x000000c7 => "\x80", + 0x000000c9 => "\x90", + 0x000000cd => "\x8d", + 0x000000d1 => "\xa5", + 0x000000d3 => "\x95", + 0x000000d6 => "\x99", + 0x000000da => "\x97", + 0x000000dc => "\x9a", + 0x000000e0 => "\x85", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e4 => "\x84", + 0x000000e5 => "\x86", + 0x000000e6 => "\x91", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ed => "\xa1", + 0x000000ee => "\x8c", + 0x000000ef => "\x8b", + 0x000000f1 => "\xa4", + 0x000000f3 => "\xa2", + 0x000000f6 => "\x94", + 0x000000f7 => "\xf6", + 0x000000fa => "\xa3", + 0x000000fc => "\x81", + 0x00000150 => "\xa7", + 0x00000151 => "\x93", + 0x00000170 => "\x98", + 0x00000171 => "\x96", + 0x00000393 => "\xe2", + 0x00000398 => "\xe9", + 0x000003a3 => "\xe4", + 0x000003a6 => "\xe8", + 0x000003a9 => "\xea", + 0x000003b1 => "\xe0", + 0x000003b2 => "\xe1", + 0x000003b4 => "\xeb", + 0x000003b5 => "\xee", + 0x000003bc => "\xe6", + 0x000003c0 => "\xe3", + 0x000003c3 => "\xe5", + 0x000003c4 => "\xe7", + 0x00002022 => "\xfa", + 0x0000207f => "\xfc", + 0x000020a7 => "\x9e", + 0x00002205 => "\xed", + 0x00002218 => "\xf8", + 0x0000221a => "\xfb", + 0x0000221e => "\xec", + 0x00002229 => "\xef", + 0x00002248 => "\xf7", + 0x00002261 => "\xf0", + 0x00002264 => "\xf3", + 0x00002265 => "\xf2", + 0x00002310 => "\xa9", + 0x00002320 => "\xf4", + 0x00002321 => "\xf5", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002552 => "\xd5", + 0x00002553 => "\xd6", + 0x00002554 => "\xc9", + 0x00002555 => "\xb8", + 0x00002556 => "\xb7", + 0x00002557 => "\xbb", + 0x00002558 => "\xd4", + 0x00002559 => "\xd3", + 0x0000255a => "\xc8", + 0x0000255b => "\xbe", + 0x0000255c => "\xbd", + 0x0000255d => "\xbc", + 0x0000255e => "\xc6", + 0x0000255f => "\xc7", + 0x00002560 => "\xcc", + 0x00002561 => "\xb5", + 0x00002562 => "\xb6", + 0x00002563 => "\xb9", + 0x00002564 => "\xd1", + 0x00002565 => "\xd2", + 0x00002566 => "\xcb", + 0x00002567 => "\xcf", + 0x00002568 => "\xd0", + 0x00002569 => "\xca", + 0x0000256a => "\xd8", + 0x0000256b => "\xd7", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x0000258c => "\xdd", + 0x00002590 => "\xde", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", + 0x0000e01f => "\x9f", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::CWI - Conversion routines for CWI + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for CWI. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: Computerworld Sza'mita'stechnika vol 3 issue 13 1988-06-29 + alias CWI-2 + alias CP-HU + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000E6 | LATIN SMALL LETTER AE + 92 | 000000C6 | LATIN CAPITAL LETTER AE + 93 | 00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + 96 | 00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE + 97 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + 98 | 00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000A2 | CENT SIGN + 9C | 000000A3 | POUND SIGN + 9D | 000000A5 | YEN SIGN + 9E | 000020A7 | PESETA SIGN + 9F | 0000E01F | HUNGARIAN FLORINTH (CWI_9F) + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + A6 | 000000AA | FEMININE ORDINAL INDICATOR + A7 | 00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 00002310 | REVERSED NOT SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 0000258C | LEFT HALF BLOCK + DE | 00002590 | RIGHT HALF BLOCK + DF | 00002580 | UPPER HALF BLOCK + E0 | 000003B1 | GREEK SMALL LETTER ALPHA + E1 | 000003B2 | GREEK SMALL LETTER BETA + E2 | 00000393 | GREEK CAPITAL LETTER GAMMA + E3 | 000003C0 | GREEK SMALL LETTER PI + E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA + E5 | 000003C3 | GREEK SMALL LETTER SIGMA + E6 | 000003BC | GREEK SMALL LETTER MU + E7 | 000003C4 | GREEK SMALL LETTER TAU + E8 | 000003A6 | GREEK CAPITAL LETTER PHI + E9 | 00000398 | GREEK CAPITAL LETTER THETA + EA | 000003A9 | GREEK CAPITAL LETTER OMEGA + EB | 000003B4 | GREEK SMALL LETTER DELTA + EC | 0000221E | INFINITY + ED | 00002205 | EMPTY SET + EE | 000003B5 | GREEK SMALL LETTER EPSILON + EF | 00002229 | INTERSECTION + F0 | 00002261 | IDENTICAL TO + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002265 | GREATER-THAN OR EQUAL TO + F3 | 00002264 | LESS-THAN OR EQUAL TO + F4 | 00002320 | TOP HALF INTEGRAL + F5 | 00002321 | BOTTOM HALF INTEGRAL + F6 | 000000F7 | DIVISION SIGN + F7 | 00002248 | ALMOST EQUAL TO + F8 | 00002218 | RING OPERATOR + F9 | 000000B7 | MIDDLE DOT + FA | 00002022 | BULLET + FB | 0000221A | SQUARE ROOT + FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/DEC_MCS.pm b/lib/Locale/RecodeData/DEC_MCS.pm new file mode 100644 index 0000000..853ed30 --- /dev/null +++ b/lib/Locale/RecodeData/DEC_MCS.pm @@ -0,0 +1,1110 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for DEC-MCS. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::DEC_MCS; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0x00a1, + 0x00a2, + 0x00a3, + 0xfffd, + 0x00a5, + 0xfffd, + 0x00a7, + 0x00a4, + 0x00a9, + 0x00aa, + 0x00ab, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0xfffd, + 0x00b5, + 0x00b6, + 0x00b7, + 0xfffd, + 0x00b9, + 0x00ba, + 0x00bb, + 0x00bc, + 0x00bd, + 0xfffd, + 0x00bf, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0xfffd, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x0152, + 0x00d8, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x0178, + 0xfffd, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0xfffd, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x0153, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x00ff, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xef\xbf\xbd", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xef\xbf\xbd", + "\xc2\xa5", + "\xef\xbf\xbd", + "\xc2\xa7", + "\xc2\xa4", + "\xc2\xa9", + "\xc2\xaa", + "\xc2\xab", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xef\xbf\xbd", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xef\xbf\xbd", + "\xc2\xb9", + "\xc2\xba", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xef\xbf\xbd", + "\xc2\xbf", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xef\xbf\xbd", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc5\x92", + "\xc3\x98", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc5\xb8", + "\xef\xbf\xbd", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xef\xbf\xbd", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc5\x93", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbf", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a1 => "\xa1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa8", + 0x000000a5 => "\xa5", + 0x000000a7 => "\xa7", + 0x000000a9 => "\xa9", + 0x000000aa => "\xaa", + 0x000000ab => "\xab", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b9 => "\xb9", + 0x000000ba => "\xba", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000bf => "\xbf", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d1 => "\xd1", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d8 => "\xd8", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000ff => "\xfd", + 0x00000152 => "\xd7", + 0x00000153 => "\xf7", + 0x00000178 => "\xdd", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::DEC_MCS - Conversion routines for DEC_MCS + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for DEC-MCS. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + VAX/VMS User's Manual, Order Number: AI-Y517A-TE, April 1986. + alias DEC + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A5 | 000000A5 | YEN SIGN + A7 | 000000A7 | SECTION SIGN + A8 | 000000A4 | CURRENCY SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000AA | FEMININE ORDINAL INDICATOR + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000BA | MASCULINE ORDINAL INDICATOR + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 00000152 | LATIN CAPITAL LIGATURE OE + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 00000153 | LATIN SMALL LIGATURE OE + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_AT_DE.pm b/lib/Locale/RecodeData/EBCDIC_AT_DE.pm new file mode 100644 index 0000000..5ed9862 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_AT_DE.pm @@ -0,0 +1,947 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-AT-DE. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_AT_DE; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00c4, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00dc, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x0023, + 0x00a7, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00df, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e4, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00fc, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00d6, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x84", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x9c", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\x23", + "\xc2\xa7", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x9f", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa4", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xbc", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x96", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a7 => "\x7c", + 0x000000c4 => "\x4a", + 0x000000d6 => "\xe0", + 0x000000dc => "\x5a", + 0x000000df => "\xa1", + 0x000000e4 => "\xc0", + 0x000000f6 => "\x6a", + 0x000000fc => "\xd0", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_AT_DE - Conversion routines for EBCDIC_AT_DE + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-AT-DE. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 5A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 000000A7 | SECTION SIGN + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_AT_DE_A.pm b/lib/Locale/RecodeData/EBCDIC_AT_DE_A.pm new file mode 100644 index 0000000..632535e --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_AT_DE_A.pm @@ -0,0 +1,937 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-AT-DE-A. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_AT_DE_A; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f6, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00fc, + 0x00dc, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00df, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x003a, + 0x00c4, + 0x00d6, + 0x0027, + 0x003d, + 0x00e4, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb6", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xbc", + "\xc3\x9c", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x9f", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x3a", + "\xc3\x84", + "\xc3\x96", + "\x27", + "\x3d", + "\xc3\xa4", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007c => "\x4f", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000ac => "\x5f", + 0x000000c4 => "\x7b", + 0x000000d6 => "\x7c", + 0x000000dc => "\x5b", + 0x000000df => "\x6a", + 0x000000e4 => "\x7f", + 0x000000f6 => "\x4a", + 0x000000fc => "\x5a", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_AT_DE_A - Conversion routines for EBCDIC_AT_DE_A + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-AT-DE-A. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 5A | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 5B | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000DF | LATIN SMALL LETTER SHARP S (German) + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 7A | 0000003A | COLON + 7B | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 7C | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_CA_FR.pm b/lib/Locale/RecodeData/EBCDIC_CA_FR.pm new file mode 100644 index 0000000..f57794b --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_CA_FR.pm @@ -0,0 +1,989 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-CA-FR. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_CA_FR; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0x00e2, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e7, + 0xfffd, + 0x00e0, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0x00ea, + 0x00eb, + 0xfffd, + 0xfffd, + 0x00ee, + 0x00ef, + 0xfffd, + 0xfffd, + 0x00b4, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0xfffd, + 0x00c0, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00c7, + 0xfffd, + 0x00f9, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0x00c9, + 0x00ca, + 0x00cb, + 0xfffd, + 0x00ce, + 0x00cf, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a8, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e9, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0x00f4, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e8, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0x00fb, + 0x00fc, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00b8, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0x00d4, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0x00db, + 0x00dc, + 0x00d9, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xc3\xa2", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa7", + "\xef\xbf\xbd", + "\xc3\xa0", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xc3\xaa", + "\xc3\xab", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xae", + "\xc3\xaf", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb4", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\xef\xbf\xbd", + "\xc3\x80", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x87", + "\xef\xbf\xbd", + "\xc3\xb9", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xef\xbf\xbd", + "\xc3\x8e", + "\xc3\x8f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa8", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa9", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xc3\xb4", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa8", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xc3\xbb", + "\xc3\xbc", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb8", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xc3\x94", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a8 => "\xa1", + 0x000000b4 => "\x5a", + 0x000000b8 => "\xe0", + 0x000000c0 => "\x64", + 0x000000c2 => "\x62", + 0x000000c7 => "\x68", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000ce => "\x75", + 0x000000cf => "\x76", + 0x000000d4 => "\xeb", + 0x000000d9 => "\xfd", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000e0 => "\x4a", + 0x000000e2 => "\x42", + 0x000000e7 => "\x48", + 0x000000e8 => "\xd0", + 0x000000e9 => "\xc0", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f4 => "\xcb", + 0x000000f9 => "\x6a", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_CA_FR - Conversion routines for EBCDIC_CA_FR + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-CA-FR. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 4A | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 5A | 000000B4 | ACUTE ACCENT + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 6A | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 75 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 76 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000A8 | DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + D0 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + E0 | 000000B8 | CEDILLA + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_DK_NO.pm b/lib/Locale/RecodeData/EBCDIC_DK_NO.pm new file mode 100644 index 0000000..f20d118 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_DK_NO.pm @@ -0,0 +1,948 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-DK-NO. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_DK_NO; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0023, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a4, + 0x00c5, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f8, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x00c6, + 0x00d8, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00fc, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e6, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e5, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005c, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x23", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa4", + "\xc3\x85", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb8", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\xc3\x86", + "\xc3\x98", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xbc", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa6", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa5", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5c", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x4a", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005c => "\xe0", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a4 => "\x5a", + 0x000000c5 => "\x5b", + 0x000000c6 => "\x7b", + 0x000000d8 => "\x7c", + 0x000000e5 => "\xd0", + 0x000000e6 => "\xc0", + 0x000000f8 => "\x6a", + 0x000000fc => "\xa1", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_DK_NO - Conversion routines for EBCDIC_DK_NO + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-DK-NO. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 00000023 | NUMBER SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 5A | 000000A4 | CURRENCY SIGN + 5B | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 000000C6 | LATIN CAPITAL LETTER AE + 7C | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 000000E6 | LATIN SMALL LETTER AE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 0000005C | REVERSE SOLIDUS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_DK_NO_A.pm b/lib/Locale/RecodeData/EBCDIC_DK_NO_A.pm new file mode 100644 index 0000000..3fc0d84 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_DK_NO_A.pm @@ -0,0 +1,937 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-DK-NO-A. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_DK_NO_A; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f8, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e5, + 0x00c5, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x003a, + 0x00c6, + 0x00d8, + 0x0027, + 0x003d, + 0x00e6, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb8", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa5", + "\xc3\x85", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x3a", + "\xc3\x86", + "\xc3\x98", + "\x27", + "\x3d", + "\xc3\xa6", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007c => "\x4f", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a6 => "\x6a", + 0x000000ac => "\x5f", + 0x000000c5 => "\x5b", + 0x000000c6 => "\x7b", + 0x000000d8 => "\x7c", + 0x000000e5 => "\x5a", + 0x000000e6 => "\x7f", + 0x000000f8 => "\x4a", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_DK_NO_A - Conversion routines for EBCDIC_DK_NO_A + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-DK-NO-A. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 5A | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 5B | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 7A | 0000003A | COLON + 7B | 000000C6 | LATIN CAPITAL LETTER AE + 7C | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 000000E6 | LATIN SMALL LETTER AE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_ES.pm b/lib/Locale/RecodeData/EBCDIC_ES.pm new file mode 100644 index 0000000..069eca8 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_ES.pm @@ -0,0 +1,947 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-ES. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_ES; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a2, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0021, + 0x20a7, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f1, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x00d1, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a8, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005c, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa2", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x21", + "\xe2\x82\xa7", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb1", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\xc3\x91", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa8", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5c", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005c => "\xe0", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a2 => "\x4a", + 0x000000a8 => "\xa1", + 0x000000ac => "\x5f", + 0x000000d1 => "\x7b", + 0x000000f1 => "\x6a", + 0x000020a7 => "\x5b", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_ES - Conversion routines for EBCDIC_ES + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-ES. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000A2 | CENT SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 5A | 00000021 | EXCLAMATION MARK + 5B | 000020A7 | PESETA SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000A8 | DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 0000005C | REVERSE SOLIDUS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_ES_A.pm b/lib/Locale/RecodeData/EBCDIC_ES_A.pm new file mode 100644 index 0000000..9e3919e --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_ES_A.pm @@ -0,0 +1,937 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-ES-A. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_ES_A; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a2, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0021, + 0x20a7, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x003a, + 0x00d1, + 0x0040, + 0x0027, + 0x003d, + 0x00f1, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa2", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x21", + "\xe2\x82\xa7", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x3a", + "\xc3\x91", + "\x40", + "\x27", + "\x3d", + "\xc3\xb1", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007c => "\x4f", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a2 => "\x4a", + 0x000000a6 => "\x6a", + 0x000000ac => "\x5f", + 0x000000d1 => "\x7b", + 0x000000f1 => "\x7f", + 0x000020a7 => "\x5b", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_ES_A - Conversion routines for EBCDIC_ES_A + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-ES-A. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000A2 | CENT SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 5A | 00000021 | EXCLAMATION MARK + 5B | 000020A7 | PESETA SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 7A | 0000003A | COLON + 7B | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_ES_S.pm b/lib/Locale/RecodeData/EBCDIC_ES_S.pm new file mode 100644 index 0000000..102e967 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_ES_S.pm @@ -0,0 +1,947 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-ES-S. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_ES_S; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a2, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0021, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f1, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x00d1, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a8, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005c, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa2", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x21", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb1", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\xc3\x91", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa8", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5c", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005c => "\xe0", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a2 => "\x4a", + 0x000000a8 => "\xa1", + 0x000000ac => "\x5f", + 0x000000d1 => "\x7b", + 0x000000f1 => "\x6a", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_ES_S - Conversion routines for EBCDIC_ES_S + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-ES-S. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000A2 | CENT SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 5A | 00000021 | EXCLAMATION MARK + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000A8 | DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 0000005C | REVERSE SOLIDUS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_FI_SE.pm b/lib/Locale/RecodeData/EBCDIC_FI_SE.pm new file mode 100644 index 0000000..3d772f1 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_FI_SE.pm @@ -0,0 +1,947 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-FI-SE. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_FI_SE; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a7, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a4, + 0x00c5, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e9, + 0x003a, + 0x00c4, + 0x00d6, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00fc, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e4, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e5, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00c9, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa7", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa4", + "\xc3\x85", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa9", + "\x3a", + "\xc3\x84", + "\xc3\x96", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xbc", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa4", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa5", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x89", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a4 => "\x5a", + 0x000000a7 => "\x4a", + 0x000000c4 => "\x7b", + 0x000000c5 => "\x5b", + 0x000000c9 => "\xe0", + 0x000000d6 => "\x7c", + 0x000000e4 => "\xc0", + 0x000000e5 => "\xd0", + 0x000000e9 => "\x79", + 0x000000f6 => "\x6a", + 0x000000fc => "\xa1", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_FI_SE - Conversion routines for EBCDIC_FI_SE + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-FI-SE. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000A7 | SECTION SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 5A | 000000A4 | CURRENCY SIGN + 5B | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 7A | 0000003A | COLON + 7B | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 7C | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_FI_SE_A.pm b/lib/Locale/RecodeData/EBCDIC_FI_SE_A.pm new file mode 100644 index 0000000..ffeece3 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_FI_SE_A.pm @@ -0,0 +1,937 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-FI-SE-A. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_FI_SE_A; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f6, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e5, + 0x00c5, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x003a, + 0x00c4, + 0x00d6, + 0x0027, + 0x003d, + 0x00e4, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb6", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa5", + "\xc3\x85", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x3a", + "\xc3\x84", + "\xc3\x96", + "\x27", + "\x3d", + "\xc3\xa4", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007c => "\x4f", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a6 => "\x6a", + 0x000000ac => "\x5f", + 0x000000c4 => "\x7b", + 0x000000c5 => "\x5b", + 0x000000d6 => "\x7c", + 0x000000e4 => "\x7f", + 0x000000e5 => "\x5a", + 0x000000f6 => "\x4a", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_FI_SE_A - Conversion routines for EBCDIC_FI_SE_A + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-FI-SE-A. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 5A | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 5B | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 7A | 0000003A | COLON + 7B | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 7C | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_FR.pm b/lib/Locale/RecodeData/EBCDIC_FR.pm new file mode 100644 index 0000000..dc3c0dc --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_FR.pm @@ -0,0 +1,947 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-FR. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_FR; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00b0, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a7, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f9, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x00a3, + 0x00e0, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a8, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e9, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e8, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e7, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb0", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa7", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb9", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\xc2\xa3", + "\xc3\xa0", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa8", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa9", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa8", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa7", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a3 => "\x7b", + 0x000000a7 => "\x5a", + 0x000000a8 => "\xa1", + 0x000000b0 => "\x4a", + 0x000000e0 => "\x7c", + 0x000000e7 => "\xe0", + 0x000000e8 => "\xd0", + 0x000000e9 => "\xc0", + 0x000000f9 => "\x6a", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_FR - Conversion routines for EBCDIC_FR + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-FR. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000B0 | DEGREE SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 5A | 000000A7 | SECTION SIGN + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 000000A3 | POUND SIGN + 7C | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000A8 | DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_IS_FRISS.pm b/lib/Locale/RecodeData/EBCDIC_IS_FRISS.pm new file mode 100644 index 0000000..c218d35 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_IS_FRISS.pm @@ -0,0 +1,918 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-IS-FRISS. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_IS_FRISS; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e1, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x003c, + 0x002e, + 0x00c1, + 0x0028, + 0x002b, + 0x0021, + 0x00d0, + 0x00e9, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00ed, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0024, + 0x0025, + 0x00c9, + 0x002a, + 0x0029, + 0x003b, + 0x0026, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0023, + 0x2018, + 0x002c, + 0x00de, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00cd, + 0xfffd, + 0xfffd, + 0x007c, + 0x00f0, + 0x003a, + 0x00c6, + 0x00d6, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00dd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00b0, + 0x00f6, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0x005b, + 0x00fd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005d, + 0x00a8, + 0xfffd, + 0xfffd, + 0x00fe, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f3, + 0xfffd, + 0x00e6, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00fa, + 0xfffd, + 0x00b4, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00d3, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00da, + 0x007f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa1", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x3c", + "\x2e", + "\xc3\x81", + "\x28", + "\x2b", + "\x21", + "\xc3\x90", + "\xc3\xa9", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xad", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x24", + "\x25", + "\xc3\x89", + "\x2a", + "\x29", + "\x3b", + "\x26", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x23", + "\xe2\x80\x98", + "\x2c", + "\xc3\x9e", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x8d", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7c", + "\xc3\xb0", + "\x3a", + "\xc3\x86", + "\xc3\x96", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x9d", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb0", + "\xc3\xb6", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5b", + "\xc3\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5d", + "\xc2\xa8", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xbe", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb3", + "\xef\xbf\xbd", + "\xc3\xa6", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xba", + "\xef\xbf\xbd", + "\xc2\xb4", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x93", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x9a", + "\x7f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x69", + 0x00000024 => "\x59", + 0x00000025 => "\x5a", + 0x00000026 => "\x5f", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4a", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\xac", + 0x0000005d => "\xbc", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007c => "\x78", + 0x0000007f => "\xff", + 0x000000a8 => "\xbd", + 0x000000b0 => "\xa0", + 0x000000b4 => "\xe0", + 0x000000c1 => "\x4c", + 0x000000c6 => "\x7b", + 0x000000c9 => "\x5b", + 0x000000cd => "\x75", + 0x000000d0 => "\x50", + 0x000000d3 => "\xee", + 0x000000d6 => "\x7c", + 0x000000da => "\xfe", + 0x000000dd => "\x8d", + 0x000000de => "\x6c", + 0x000000e1 => "\x45", + 0x000000e6 => "\xd0", + 0x000000e9 => "\x51", + 0x000000ed => "\x55", + 0x000000f0 => "\x79", + 0x000000f3 => "\xce", + 0x000000f6 => "\xa1", + 0x000000fa => "\xde", + 0x000000fd => "\xad", + 0x000000fe => "\xc0", + 0x00002018 => "\x6a", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_IS_FRISS - Conversion routines for EBCDIC_IS_FRISS + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-IS-FRISS. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: Skyrsuvelar Rikisins og Reykjavikurborgar, feb 1982 + alias FRISS + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 40 | 00000020 | SPACE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 4A | 0000003C | LESS-THAN SIGN + 4B | 0000002E | FULL STOP + 4C | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 59 | 00000024 | DOLLAR SIGN + 5A | 00000025 | PERCENT SIGN + 5B | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 00000026 | AMPERSAND + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 69 | 00000023 | NUMBER SIGN + 6A | 00002018 | LEFT SINGLE QUOTATION MARK + 6B | 0000002C | COMMA + 6C | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 78 | 0000007C | VERTICAL LINE + 79 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 7A | 0000003A | COLON + 7B | 000000C6 | LATIN CAPITAL LETTER AE + 7C | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8D | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A0 | 000000B0 | DEGREE SIGN + A1 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AC | 0000005B | LEFT SQUARE BRACKET + AD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + BC | 0000005D | RIGHT SQUARE BRACKET + BD | 000000A8 | DIAERESIS + C0 | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + D0 | 000000E6 | LATIN SMALL LETTER AE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + E0 | 000000B4 | ACUTE ACCENT + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_IT.pm b/lib/Locale/RecodeData/EBCDIC_IT.pm new file mode 100644 index 0000000..76cd78b --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_IT.pm @@ -0,0 +1,947 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-IT. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_IT; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00b0, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e9, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f2, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f9, + 0x003a, + 0x00a3, + 0x00a7, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00ec, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e0, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e8, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e7, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb0", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa9", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb2", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb9", + "\x3a", + "\xc2\xa3", + "\xc2\xa7", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xac", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa0", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa8", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa7", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a3 => "\x7b", + 0x000000a7 => "\x7c", + 0x000000b0 => "\x4a", + 0x000000e0 => "\xc0", + 0x000000e7 => "\xe0", + 0x000000e8 => "\xd0", + 0x000000e9 => "\x5a", + 0x000000ec => "\xa1", + 0x000000f2 => "\x6a", + 0x000000f9 => "\x79", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_IT - Conversion routines for EBCDIC_IT + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-IT. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000B0 | DEGREE SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 5A | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 7A | 0000003A | COLON + 7B | 000000A3 | POUND SIGN + 7C | 000000A7 | SECTION SIGN + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_PT.pm b/lib/Locale/RecodeData/EBCDIC_PT.pm new file mode 100644 index 0000000..93d5df5 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_PT.pm @@ -0,0 +1,937 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-PT. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_PT; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f5, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x00c3, + 0x00d5, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e7, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e3, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00b4, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00c7, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb5", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\xc3\x83", + "\xc3\x95", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa7", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa3", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb4", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x87", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000b4 => "\xd0", + 0x000000c3 => "\x7b", + 0x000000c7 => "\xe0", + 0x000000d5 => "\x7c", + 0x000000e3 => "\xc0", + 0x000000e7 => "\xa1", + 0x000000f5 => "\x6a", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_PT - Conversion routines for EBCDIC_PT + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-PT. +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 7C | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 000000B4 | ACUTE ACCENT + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_UK.pm b/lib/Locale/RecodeData/EBCDIC_UK.pm new file mode 100644 index 0000000..bbbd68e --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_UK.pm @@ -0,0 +1,947 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-UK. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_UK; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0024, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0021, + 0x00a3, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x203e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005c, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x24", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x21", + "\xc2\xa3", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\xbe", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5c", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x4a", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005c => "\xe0", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a3 => "\x5b", + 0x000000a6 => "\x6a", + 0x000000ac => "\x5f", + 0x0000203e => "\xa1", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_UK - Conversion routines for EBCDIC_UK + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-UK. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 00000024 | DOLLAR SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 5A | 00000021 | EXCLAMATION MARK + 5B | 000000A3 | POUND SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 0000203E | OVERLINE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 0000005C | REVERSE SOLIDUS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/EBCDIC_US.pm b/lib/Locale/RecodeData/EBCDIC_US.pm new file mode 100644 index 0000000..3ce1769 --- /dev/null +++ b/lib/Locale/RecodeData/EBCDIC_US.pm @@ -0,0 +1,947 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for EBCDIC-US. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::EBCDIC_US; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a2, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0021, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005c, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa2", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x21", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5c", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005c => "\xe0", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a2 => "\x4a", + 0x000000a6 => "\x6a", + 0x000000ac => "\x5f", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::EBCDIC_US - Conversion routines for EBCDIC_US + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for EBCDIC-US. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000A2 | CENT SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 5A | 00000021 | EXCLAMATION MARK + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 0000005C | REVERSE SOLIDUS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ECMA_CYRILLIC.pm b/lib/Locale/RecodeData/ECMA_CYRILLIC.pm new file mode 100644 index 0000000..24e6d15 --- /dev/null +++ b/lib/Locale/RecodeData/ECMA_CYRILLIC.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ECMA-CYRILLIC. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ECMA_CYRILLIC; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0452, + 0x0453, + 0x0451, + 0x0454, + 0x0455, + 0x0456, + 0x0457, + 0x0458, + 0x0459, + 0x045a, + 0x045b, + 0x045c, + 0x00ad, + 0x045e, + 0x045f, + 0x2116, + 0x0402, + 0x0403, + 0x0401, + 0x0404, + 0x0405, + 0x0406, + 0x0407, + 0x0408, + 0x0409, + 0x040a, + 0x040b, + 0x040c, + 0x00a4, + 0x040e, + 0x040f, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xd1\x92", + "\xd1\x93", + "\xd1\x91", + "\xd1\x94", + "\xd1\x95", + "\xd1\x96", + "\xd1\x97", + "\xd1\x98", + "\xd1\x99", + "\xd1\x9a", + "\xd1\x9b", + "\xd1\x9c", + "\xc2\xad", + "\xd1\x9e", + "\xd1\x9f", + "\xe2\x84\x96", + "\xd0\x82", + "\xd0\x83", + "\xd0\x81", + "\xd0\x84", + "\xd0\x85", + "\xd0\x86", + "\xd0\x87", + "\xd0\x88", + "\xd0\x89", + "\xd0\x8a", + "\xd0\x8b", + "\xd0\x8c", + "\xc2\xa4", + "\xd0\x8e", + "\xd0\x8f", + "\xd1\x8e", + "\xd0\xb0", + "\xd0\xb1", + "\xd1\x86", + "\xd0\xb4", + "\xd0\xb5", + "\xd1\x84", + "\xd0\xb3", + "\xd1\x85", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x8f", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd0\xb6", + "\xd0\xb2", + "\xd1\x8c", + "\xd1\x8b", + "\xd0\xb7", + "\xd1\x88", + "\xd1\x8d", + "\xd1\x89", + "\xd1\x87", + "\xd1\x8a", + "\xd0\xae", + "\xd0\x90", + "\xd0\x91", + "\xd0\xa6", + "\xd0\x94", + "\xd0\x95", + "\xd0\xa4", + "\xd0\x93", + "\xd0\xa5", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xaf", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\x96", + "\xd0\x92", + "\xd0\xac", + "\xd0\xab", + "\xd0\x97", + "\xd0\xa8", + "\xd0\xad", + "\xd0\xa9", + "\xd0\xa7", + "\xd0\xaa", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a4 => "\xbd", + 0x000000ad => "\xad", + 0x00000401 => "\xb3", + 0x00000402 => "\xb1", + 0x00000403 => "\xb2", + 0x00000404 => "\xb4", + 0x00000405 => "\xb5", + 0x00000406 => "\xb6", + 0x00000407 => "\xb7", + 0x00000408 => "\xb8", + 0x00000409 => "\xb9", + 0x0000040a => "\xba", + 0x0000040b => "\xbb", + 0x0000040c => "\xbc", + 0x0000040e => "\xbe", + 0x0000040f => "\xbf", + 0x00000410 => "\xe1", + 0x00000411 => "\xe2", + 0x00000412 => "\xf7", + 0x00000413 => "\xe7", + 0x00000414 => "\xe4", + 0x00000415 => "\xe5", + 0x00000416 => "\xf6", + 0x00000417 => "\xfa", + 0x00000418 => "\xe9", + 0x00000419 => "\xea", + 0x0000041a => "\xeb", + 0x0000041b => "\xec", + 0x0000041c => "\xed", + 0x0000041d => "\xee", + 0x0000041e => "\xef", + 0x0000041f => "\xf0", + 0x00000420 => "\xf2", + 0x00000421 => "\xf3", + 0x00000422 => "\xf4", + 0x00000423 => "\xf5", + 0x00000424 => "\xe6", + 0x00000425 => "\xe8", + 0x00000426 => "\xe3", + 0x00000427 => "\xfe", + 0x00000428 => "\xfb", + 0x00000429 => "\xfd", + 0x0000042a => "\xff", + 0x0000042b => "\xf9", + 0x0000042c => "\xf8", + 0x0000042d => "\xfc", + 0x0000042e => "\xe0", + 0x0000042f => "\xf1", + 0x00000430 => "\xc1", + 0x00000431 => "\xc2", + 0x00000432 => "\xd7", + 0x00000433 => "\xc7", + 0x00000434 => "\xc4", + 0x00000435 => "\xc5", + 0x00000436 => "\xd6", + 0x00000437 => "\xda", + 0x00000438 => "\xc9", + 0x00000439 => "\xca", + 0x0000043a => "\xcb", + 0x0000043b => "\xcc", + 0x0000043c => "\xcd", + 0x0000043d => "\xce", + 0x0000043e => "\xcf", + 0x0000043f => "\xd0", + 0x00000440 => "\xd2", + 0x00000441 => "\xd3", + 0x00000442 => "\xd4", + 0x00000443 => "\xd5", + 0x00000444 => "\xc6", + 0x00000445 => "\xc8", + 0x00000446 => "\xc3", + 0x00000447 => "\xde", + 0x00000448 => "\xdb", + 0x00000449 => "\xdd", + 0x0000044a => "\xdf", + 0x0000044b => "\xd9", + 0x0000044c => "\xd8", + 0x0000044d => "\xdc", + 0x0000044e => "\xc0", + 0x0000044f => "\xd1", + 0x00000451 => "\xa3", + 0x00000452 => "\xa1", + 0x00000453 => "\xa2", + 0x00000454 => "\xa4", + 0x00000455 => "\xa5", + 0x00000456 => "\xa6", + 0x00000457 => "\xa7", + 0x00000458 => "\xa8", + 0x00000459 => "\xa9", + 0x0000045a => "\xaa", + 0x0000045b => "\xab", + 0x0000045c => "\xac", + 0x0000045e => "\xae", + 0x0000045f => "\xaf", + 0x00002116 => "\xb0", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ECMA_CYRILLIC - Conversion routines for ECMA_CYRILLIC + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ECMA-CYRILLIC. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-111 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian) + A2 | 00000453 | CYRILLIC SMALL LETTER GJE + A3 | 00000451 | CYRILLIC SMALL LETTER IO + A4 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + A5 | 00000455 | CYRILLIC SMALL LETTER DZE + A6 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + A7 | 00000457 | CYRILLIC SMALL LETTER YI (Ukrainian) + A8 | 00000458 | CYRILLIC SMALL LETTER JE + A9 | 00000459 | CYRILLIC SMALL LETTER LJE + AA | 0000045A | CYRILLIC SMALL LETTER NJE + AB | 0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian) + AC | 0000045C | CYRILLIC SMALL LETTER KJE + AD | 000000AD | SOFT HYPHEN + AE | 0000045E | CYRILLIC SMALL LETTER SHORT U (Byelorussian) + AF | 0000045F | CYRILLIC SMALL LETTER DZHE + B0 | 00002116 | NUMERO SIGN + B1 | 00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian) + B2 | 00000403 | CYRILLIC CAPITAL LETTER GJE + B3 | 00000401 | CYRILLIC CAPITAL LETTER IO + B4 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + B5 | 00000405 | CYRILLIC CAPITAL LETTER DZE + B6 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + B7 | 00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian) + B8 | 00000408 | CYRILLIC CAPITAL LETTER JE + B9 | 00000409 | CYRILLIC CAPITAL LETTER LJE + BA | 0000040A | CYRILLIC CAPITAL LETTER NJE + BB | 0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) + BC | 0000040C | CYRILLIC CAPITAL LETTER KJE + BD | 000000A4 | CURRENCY SIGN + BE | 0000040E | CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) + BF | 0000040F | CYRILLIC CAPITAL LETTER DZHE + C0 | 0000044E | CYRILLIC SMALL LETTER YU + C1 | 00000430 | CYRILLIC SMALL LETTER A + C2 | 00000431 | CYRILLIC SMALL LETTER BE + C3 | 00000446 | CYRILLIC SMALL LETTER TSE + C4 | 00000434 | CYRILLIC SMALL LETTER DE + C5 | 00000435 | CYRILLIC SMALL LETTER IE + C6 | 00000444 | CYRILLIC SMALL LETTER EF + C7 | 00000433 | CYRILLIC SMALL LETTER GHE + C8 | 00000445 | CYRILLIC SMALL LETTER HA + C9 | 00000438 | CYRILLIC SMALL LETTER I + CA | 00000439 | CYRILLIC SMALL LETTER SHORT I + CB | 0000043A | CYRILLIC SMALL LETTER KA + CC | 0000043B | CYRILLIC SMALL LETTER EL + CD | 0000043C | CYRILLIC SMALL LETTER EM + CE | 0000043D | CYRILLIC SMALL LETTER EN + CF | 0000043E | CYRILLIC SMALL LETTER O + D0 | 0000043F | CYRILLIC SMALL LETTER PE + D1 | 0000044F | CYRILLIC SMALL LETTER YA + D2 | 00000440 | CYRILLIC SMALL LETTER ER + D3 | 00000441 | CYRILLIC SMALL LETTER ES + D4 | 00000442 | CYRILLIC SMALL LETTER TE + D5 | 00000443 | CYRILLIC SMALL LETTER U + D6 | 00000436 | CYRILLIC SMALL LETTER ZHE + D7 | 00000432 | CYRILLIC SMALL LETTER VE + D8 | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + D9 | 0000044B | CYRILLIC SMALL LETTER YERU + DA | 00000437 | CYRILLIC SMALL LETTER ZE + DB | 00000448 | CYRILLIC SMALL LETTER SHA + DC | 0000044D | CYRILLIC SMALL LETTER E + DD | 00000449 | CYRILLIC SMALL LETTER SHCHA + DE | 00000447 | CYRILLIC SMALL LETTER CHE + DF | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + E0 | 0000042E | CYRILLIC CAPITAL LETTER YU + E1 | 00000410 | CYRILLIC CAPITAL LETTER A + E2 | 00000411 | CYRILLIC CAPITAL LETTER BE + E3 | 00000426 | CYRILLIC CAPITAL LETTER TSE + E4 | 00000414 | CYRILLIC CAPITAL LETTER DE + E5 | 00000415 | CYRILLIC CAPITAL LETTER IE + E6 | 00000424 | CYRILLIC CAPITAL LETTER EF + E7 | 00000413 | CYRILLIC CAPITAL LETTER GHE + E8 | 00000425 | CYRILLIC CAPITAL LETTER HA + E9 | 00000418 | CYRILLIC CAPITAL LETTER I + EA | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + EB | 0000041A | CYRILLIC CAPITAL LETTER KA + EC | 0000041B | CYRILLIC CAPITAL LETTER EL + ED | 0000041C | CYRILLIC CAPITAL LETTER EM + EE | 0000041D | CYRILLIC CAPITAL LETTER EN + EF | 0000041E | CYRILLIC CAPITAL LETTER O + F0 | 0000041F | CYRILLIC CAPITAL LETTER PE + F1 | 0000042F | CYRILLIC CAPITAL LETTER YA + F2 | 00000420 | CYRILLIC CAPITAL LETTER ER + F3 | 00000421 | CYRILLIC CAPITAL LETTER ES + F4 | 00000422 | CYRILLIC CAPITAL LETTER TE + F5 | 00000423 | CYRILLIC CAPITAL LETTER U + F6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + F7 | 00000412 | CYRILLIC CAPITAL LETTER VE + F8 | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + F9 | 0000042B | CYRILLIC CAPITAL LETTER YERU + FA | 00000417 | CYRILLIC CAPITAL LETTER ZE + FB | 00000428 | CYRILLIC CAPITAL LETTER SHA + FC | 0000042D | CYRILLIC CAPITAL LETTER E + FD | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + FE | 00000427 | CYRILLIC CAPITAL LETTER CHE + FF | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/GEORGIAN_ACADEMY.pm b/lib/Locale/RecodeData/GEORGIAN_ACADEMY.pm new file mode 100644 index 0000000..1ba3dee --- /dev/null +++ b/lib/Locale/RecodeData/GEORGIAN_ACADEMY.pm @@ -0,0 +1,1129 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for GEORGIAN-ACADEMY. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::GEORGIAN_ACADEMY; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x201a, + 0x0192, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0x02c6, + 0x2030, + 0x0160, + 0x2039, + 0x0152, + 0x008d, + 0x008e, + 0x008f, + 0x0090, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0x02dc, + 0x2122, + 0x0161, + 0x203a, + 0x0153, + 0x009d, + 0x009e, + 0x0178, + 0x00a0, + 0x00a1, + 0x00a2, + 0x00a3, + 0x00a4, + 0x00a5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x00aa, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00af, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00b8, + 0x00b9, + 0x00ba, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0x00bf, + 0x10d0, + 0x10d1, + 0x10d2, + 0x10d3, + 0x10d4, + 0x10d5, + 0x10d6, + 0x10d7, + 0x10d8, + 0x10d9, + 0x10da, + 0x10db, + 0x10dc, + 0x10dd, + 0x10de, + 0x10df, + 0x10e0, + 0x10e1, + 0x10e2, + 0x10e3, + 0x10e4, + 0x10e5, + 0x10e6, + 0x10e7, + 0x10e8, + 0x10e9, + 0x10ea, + 0x10eb, + 0x10ec, + 0x10ed, + 0x10ee, + 0x10ef, + 0x10f0, + 0x10f1, + 0x10f2, + 0x10f3, + 0x10f4, + 0x10f5, + 0x10f6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00f0, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00f7, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x00fd, + 0x00fe, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xe2\x80\x9a", + "\xc6\x92", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xcb\x86", + "\xe2\x80\xb0", + "\xc5\xa0", + "\xe2\x80\xb9", + "\xc5\x92", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xcb\x9c", + "\xe2\x84\xa2", + "\xc5\xa1", + "\xe2\x80\xba", + "\xc5\x93", + "\xc2\x9d", + "\xc2\x9e", + "\xc5\xb8", + "\xc2\xa0", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc2\xaa", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc2\xb9", + "\xc2\xba", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xbf", + "\xe1\x83\x90", + "\xe1\x83\x91", + "\xe1\x83\x92", + "\xe1\x83\x93", + "\xe1\x83\x94", + "\xe1\x83\x95", + "\xe1\x83\x96", + "\xe1\x83\x97", + "\xe1\x83\x98", + "\xe1\x83\x99", + "\xe1\x83\x9a", + "\xe1\x83\x9b", + "\xe1\x83\x9c", + "\xe1\x83\x9d", + "\xe1\x83\x9e", + "\xe1\x83\x9f", + "\xe1\x83\xa0", + "\xe1\x83\xa1", + "\xe1\x83\xa2", + "\xe1\x83\xa3", + "\xe1\x83\xa4", + "\xe1\x83\xa5", + "\xe1\x83\xa6", + "\xe1\x83\xa7", + "\xe1\x83\xa8", + "\xe1\x83\xa9", + "\xe1\x83\xaa", + "\xe1\x83\xab", + "\xe1\x83\xac", + "\xe1\x83\xad", + "\xe1\x83\xae", + "\xe1\x83\xaf", + "\xe1\x83\xb0", + "\xe1\x83\xb1", + "\xe1\x83\xb2", + "\xe1\x83\xb3", + "\xe1\x83\xb4", + "\xe1\x83\xb5", + "\xe1\x83\xb6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb0", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbd", + "\xc3\xbe", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x000000a0 => "\xa0", + 0x000000a1 => "\xa1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000aa => "\xaa", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000b9 => "\xb9", + 0x000000ba => "\xba", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000bf => "\xbf", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f0 => "\xf0", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x000000fe => "\xfe", + 0x000000ff => "\xff", + 0x00000152 => "\x8c", + 0x00000153 => "\x9c", + 0x00000160 => "\x8a", + 0x00000161 => "\x9a", + 0x00000178 => "\x9f", + 0x00000192 => "\x83", + 0x000002c6 => "\x88", + 0x000002dc => "\x98", + 0x000010d0 => "\xc0", + 0x000010d1 => "\xc1", + 0x000010d2 => "\xc2", + 0x000010d3 => "\xc3", + 0x000010d4 => "\xc4", + 0x000010d5 => "\xc5", + 0x000010d6 => "\xc6", + 0x000010d7 => "\xc7", + 0x000010d8 => "\xc8", + 0x000010d9 => "\xc9", + 0x000010da => "\xca", + 0x000010db => "\xcb", + 0x000010dc => "\xcc", + 0x000010dd => "\xcd", + 0x000010de => "\xce", + 0x000010df => "\xcf", + 0x000010e0 => "\xd0", + 0x000010e1 => "\xd1", + 0x000010e2 => "\xd2", + 0x000010e3 => "\xd3", + 0x000010e4 => "\xd4", + 0x000010e5 => "\xd5", + 0x000010e6 => "\xd6", + 0x000010e7 => "\xd7", + 0x000010e8 => "\xd8", + 0x000010e9 => "\xd9", + 0x000010ea => "\xda", + 0x000010eb => "\xdb", + 0x000010ec => "\xdc", + 0x000010ed => "\xdd", + 0x000010ee => "\xde", + 0x000010ef => "\xdf", + 0x000010f0 => "\xe0", + 0x000010f1 => "\xe1", + 0x000010f2 => "\xe2", + 0x000010f3 => "\xe3", + 0x000010f4 => "\xe4", + 0x000010f5 => "\xe5", + 0x000010f6 => "\xe6", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::GEORGIAN_ACADEMY - Conversion routines for GEORGIAN-ACADEMY + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for GEORGIAN-ACADEMY. +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 83 | 00000192 | LATIN SMALL LETTER F WITH HOOK + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 88 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + 89 | 00002030 | PER MILLE SIGN + 8A | 00000160 | LATIN CAPITAL LETTER S WITH CARON + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 00000152 | LATIN CAPITAL LIGATURE OE + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 98 | 000002DC | SMALL TILDE + 99 | 00002122 | TRADE MARK SIGN + 9A | 00000161 | LATIN SMALL LETTER S WITH CARON + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C | 00000153 | LATIN SMALL LIGATURE OE + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000AA | FEMININE ORDINAL INDICATOR + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000BA | MASCULINE ORDINAL INDICATOR + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000010D0 | GEORGIAN LETTER AN + C1 | 000010D1 | GEORGIAN LETTER BAN + C2 | 000010D2 | GEORGIAN LETTER GAN + C3 | 000010D3 | GEORGIAN LETTER DON + C4 | 000010D4 | GEORGIAN LETTER EN + C5 | 000010D5 | GEORGIAN LETTER VIN + C6 | 000010D6 | GEORGIAN LETTER ZEN + C7 | 000010D7 | GEORGIAN LETTER TAN + C8 | 000010D8 | GEORGIAN LETTER IN + C9 | 000010D9 | GEORGIAN LETTER KAN + CA | 000010DA | GEORGIAN LETTER LAS + CB | 000010DB | GEORGIAN LETTER MAN + CC | 000010DC | GEORGIAN LETTER NAR + CD | 000010DD | GEORGIAN LETTER ON + CE | 000010DE | GEORGIAN LETTER PAR + CF | 000010DF | GEORGIAN LETTER ZHAR + D0 | 000010E0 | GEORGIAN LETTER RAE + D1 | 000010E1 | GEORGIAN LETTER SAN + D2 | 000010E2 | GEORGIAN LETTER TAR + D3 | 000010E3 | GEORGIAN LETTER UN + D4 | 000010E4 | GEORGIAN LETTER PHAR + D5 | 000010E5 | GEORGIAN LETTER KHAR + D6 | 000010E6 | GEORGIAN LETTER GHAN + D7 | 000010E7 | GEORGIAN LETTER QAR + D8 | 000010E8 | GEORGIAN LETTER SHIN + D9 | 000010E9 | GEORGIAN LETTER CHIN + DA | 000010EA | GEORGIAN LETTER CAN + DB | 000010EB | GEORGIAN LETTER JIL + DC | 000010EC | GEORGIAN LETTER CIL + DD | 000010ED | GEORGIAN LETTER CHAR + DE | 000010EE | GEORGIAN LETTER XAN + DF | 000010EF | GEORGIAN LETTER JHAN + E0 | 000010F0 | GEORGIAN LETTER HAE + E1 | 000010F1 | GEORGIAN LETTER HE + E2 | 000010F2 | GEORGIAN LETTER HIE + E3 | 000010F3 | GEORGIAN LETTER WE + E4 | 000010F4 | GEORGIAN LETTER HAR + E5 | 000010F5 | GEORGIAN LETTER HOE + E6 | 000010F6 | GEORGIAN LETTER FI + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/GEORGIAN_PS.pm b/lib/Locale/RecodeData/GEORGIAN_PS.pm new file mode 100644 index 0000000..7dcd7af --- /dev/null +++ b/lib/Locale/RecodeData/GEORGIAN_PS.pm @@ -0,0 +1,1129 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for GEORGIAN-PS. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::GEORGIAN_PS; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x201a, + 0x0192, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0x02c6, + 0x2030, + 0x0160, + 0x2039, + 0x0152, + 0x008d, + 0x008e, + 0x008f, + 0x0090, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0x02dc, + 0x2122, + 0x0161, + 0x203a, + 0x0153, + 0x009d, + 0x009e, + 0x0178, + 0x00a0, + 0x00a1, + 0x00a2, + 0x00a3, + 0x00a4, + 0x00a5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x00aa, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00af, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00b8, + 0x00b9, + 0x00ba, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0x00bf, + 0x10d0, + 0x10d1, + 0x10d2, + 0x10d3, + 0x10d4, + 0x10d5, + 0x10d6, + 0x10f1, + 0x10d7, + 0x10d8, + 0x10d9, + 0x10da, + 0x10db, + 0x10dc, + 0x10f2, + 0x10dd, + 0x10de, + 0x10df, + 0x10e0, + 0x10e1, + 0x10e2, + 0x10f3, + 0x10e3, + 0x10e4, + 0x10e5, + 0x10e6, + 0x10e7, + 0x10e8, + 0x10e9, + 0x10ea, + 0x10eb, + 0x10ec, + 0x10ed, + 0x10ee, + 0x10f4, + 0x10ef, + 0x10f0, + 0x10f5, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00f0, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00f7, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x00fd, + 0x00fe, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xe2\x80\x9a", + "\xc6\x92", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xcb\x86", + "\xe2\x80\xb0", + "\xc5\xa0", + "\xe2\x80\xb9", + "\xc5\x92", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xcb\x9c", + "\xe2\x84\xa2", + "\xc5\xa1", + "\xe2\x80\xba", + "\xc5\x93", + "\xc2\x9d", + "\xc2\x9e", + "\xc5\xb8", + "\xc2\xa0", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc2\xaa", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc2\xb9", + "\xc2\xba", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xbf", + "\xe1\x83\x90", + "\xe1\x83\x91", + "\xe1\x83\x92", + "\xe1\x83\x93", + "\xe1\x83\x94", + "\xe1\x83\x95", + "\xe1\x83\x96", + "\xe1\x83\xb1", + "\xe1\x83\x97", + "\xe1\x83\x98", + "\xe1\x83\x99", + "\xe1\x83\x9a", + "\xe1\x83\x9b", + "\xe1\x83\x9c", + "\xe1\x83\xb2", + "\xe1\x83\x9d", + "\xe1\x83\x9e", + "\xe1\x83\x9f", + "\xe1\x83\xa0", + "\xe1\x83\xa1", + "\xe1\x83\xa2", + "\xe1\x83\xb3", + "\xe1\x83\xa3", + "\xe1\x83\xa4", + "\xe1\x83\xa5", + "\xe1\x83\xa6", + "\xe1\x83\xa7", + "\xe1\x83\xa8", + "\xe1\x83\xa9", + "\xe1\x83\xaa", + "\xe1\x83\xab", + "\xe1\x83\xac", + "\xe1\x83\xad", + "\xe1\x83\xae", + "\xe1\x83\xb4", + "\xe1\x83\xaf", + "\xe1\x83\xb0", + "\xe1\x83\xb5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb0", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbd", + "\xc3\xbe", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x000000a0 => "\xa0", + 0x000000a1 => "\xa1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000aa => "\xaa", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000b9 => "\xb9", + 0x000000ba => "\xba", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000bf => "\xbf", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f0 => "\xf0", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x000000fe => "\xfe", + 0x000000ff => "\xff", + 0x00000152 => "\x8c", + 0x00000153 => "\x9c", + 0x00000160 => "\x8a", + 0x00000161 => "\x9a", + 0x00000178 => "\x9f", + 0x00000192 => "\x83", + 0x000002c6 => "\x88", + 0x000002dc => "\x98", + 0x000010d0 => "\xc0", + 0x000010d1 => "\xc1", + 0x000010d2 => "\xc2", + 0x000010d3 => "\xc3", + 0x000010d4 => "\xc4", + 0x000010d5 => "\xc5", + 0x000010d6 => "\xc6", + 0x000010d7 => "\xc8", + 0x000010d8 => "\xc9", + 0x000010d9 => "\xca", + 0x000010da => "\xcb", + 0x000010db => "\xcc", + 0x000010dc => "\xcd", + 0x000010dd => "\xcf", + 0x000010de => "\xd0", + 0x000010df => "\xd1", + 0x000010e0 => "\xd2", + 0x000010e1 => "\xd3", + 0x000010e2 => "\xd4", + 0x000010e3 => "\xd6", + 0x000010e4 => "\xd7", + 0x000010e5 => "\xd8", + 0x000010e6 => "\xd9", + 0x000010e7 => "\xda", + 0x000010e8 => "\xdb", + 0x000010e9 => "\xdc", + 0x000010ea => "\xdd", + 0x000010eb => "\xde", + 0x000010ec => "\xdf", + 0x000010ed => "\xe0", + 0x000010ee => "\xe1", + 0x000010ef => "\xe3", + 0x000010f0 => "\xe4", + 0x000010f1 => "\xc7", + 0x000010f2 => "\xce", + 0x000010f3 => "\xd5", + 0x000010f4 => "\xe2", + 0x000010f5 => "\xe5", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::GEORGIAN_PS - Conversion routines for GEORGIAN-PS + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for GEORGIAN-PS. +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 83 | 00000192 | LATIN SMALL LETTER F WITH HOOK + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 88 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + 89 | 00002030 | PER MILLE SIGN + 8A | 00000160 | LATIN CAPITAL LETTER S WITH CARON + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 00000152 | LATIN CAPITAL LIGATURE OE + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 98 | 000002DC | SMALL TILDE + 99 | 00002122 | TRADE MARK SIGN + 9A | 00000161 | LATIN SMALL LETTER S WITH CARON + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C | 00000153 | LATIN SMALL LIGATURE OE + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000AA | FEMININE ORDINAL INDICATOR + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000BA | MASCULINE ORDINAL INDICATOR + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000010D0 | GEORGIAN LETTER AN + C1 | 000010D1 | GEORGIAN LETTER BAN + C2 | 000010D2 | GEORGIAN LETTER GAN + C3 | 000010D3 | GEORGIAN LETTER DON + C4 | 000010D4 | GEORGIAN LETTER EN + C5 | 000010D5 | GEORGIAN LETTER VIN + C6 | 000010D6 | GEORGIAN LETTER ZEN + C7 | 000010F1 | GEORGIAN LETTER HE + C8 | 000010D7 | GEORGIAN LETTER TAN + C9 | 000010D8 | GEORGIAN LETTER IN + CA | 000010D9 | GEORGIAN LETTER KAN + CB | 000010DA | GEORGIAN LETTER LAS + CC | 000010DB | GEORGIAN LETTER MAN + CD | 000010DC | GEORGIAN LETTER NAR + CE | 000010F2 | GEORGIAN LETTER HIE + CF | 000010DD | GEORGIAN LETTER ON + D0 | 000010DE | GEORGIAN LETTER PAR + D1 | 000010DF | GEORGIAN LETTER ZHAR + D2 | 000010E0 | GEORGIAN LETTER RAE + D3 | 000010E1 | GEORGIAN LETTER SAN + D4 | 000010E2 | GEORGIAN LETTER TAR + D5 | 000010F3 | GEORGIAN LETTER WE + D6 | 000010E3 | GEORGIAN LETTER UN + D7 | 000010E4 | GEORGIAN LETTER PHAR + D8 | 000010E5 | GEORGIAN LETTER KHAR + D9 | 000010E6 | GEORGIAN LETTER GHAN + DA | 000010E7 | GEORGIAN LETTER QAR + DB | 000010E8 | GEORGIAN LETTER SHIN + DC | 000010E9 | GEORGIAN LETTER CHIN + DD | 000010EA | GEORGIAN LETTER CAN + DE | 000010EB | GEORGIAN LETTER JIL + DF | 000010EC | GEORGIAN LETTER CIL + E0 | 000010ED | GEORGIAN LETTER CHAR + E1 | 000010EE | GEORGIAN LETTER XAN + E2 | 000010F4 | GEORGIAN LETTER HAR + E3 | 000010EF | GEORGIAN LETTER JHAN + E4 | 000010F0 | GEORGIAN LETTER HAE + E5 | 000010F5 | GEORGIAN LETTER HOE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/GOST_19768_74.pm b/lib/Locale/RecodeData/GOST_19768_74.pm new file mode 100644 index 0000000..20b0346 --- /dev/null +++ b/lib/Locale/RecodeData/GOST_19768_74.pm @@ -0,0 +1,1085 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for GOST_19768-74. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::GOST_19768_74; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0401, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00ad, + 0xfffd, + 0xfffd, + 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, + 0xfffd, + 0x0451, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xd0\x81", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xad", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd0\x90", + "\xd0\x91", + "\xd0\x92", + "\xd0\x93", + "\xd0\x94", + "\xd0\x95", + "\xd0\x96", + "\xd0\x97", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\xa4", + "\xd0\xa5", + "\xd0\xa6", + "\xd0\xa7", + "\xd0\xa8", + "\xd0\xa9", + "\xd0\xaa", + "\xd0\xab", + "\xd0\xac", + "\xd0\xad", + "\xd0\xae", + "\xd0\xaf", + "\xd0\xb0", + "\xd0\xb1", + "\xd0\xb2", + "\xd0\xb3", + "\xd0\xb4", + "\xd0\xb5", + "\xd0\xb6", + "\xd0\xb7", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd1\x84", + "\xd1\x85", + "\xd1\x86", + "\xd1\x87", + "\xd1\x88", + "\xd1\x89", + "\xd1\x8a", + "\xd1\x8b", + "\xd1\x8c", + "\xd1\x8d", + "\xd1\x8e", + "\xd1\x8f", + "\xef\xbf\xbd", + "\xd1\x91", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000ad => "\xad", + 0x00000401 => "\xa1", + 0x00000410 => "\xb0", + 0x00000411 => "\xb1", + 0x00000412 => "\xb2", + 0x00000413 => "\xb3", + 0x00000414 => "\xb4", + 0x00000415 => "\xb5", + 0x00000416 => "\xb6", + 0x00000417 => "\xb7", + 0x00000418 => "\xb8", + 0x00000419 => "\xb9", + 0x0000041a => "\xba", + 0x0000041b => "\xbb", + 0x0000041c => "\xbc", + 0x0000041d => "\xbd", + 0x0000041e => "\xbe", + 0x0000041f => "\xbf", + 0x00000420 => "\xc0", + 0x00000421 => "\xc1", + 0x00000422 => "\xc2", + 0x00000423 => "\xc3", + 0x00000424 => "\xc4", + 0x00000425 => "\xc5", + 0x00000426 => "\xc6", + 0x00000427 => "\xc7", + 0x00000428 => "\xc8", + 0x00000429 => "\xc9", + 0x0000042a => "\xca", + 0x0000042b => "\xcb", + 0x0000042c => "\xcc", + 0x0000042d => "\xcd", + 0x0000042e => "\xce", + 0x0000042f => "\xcf", + 0x00000430 => "\xd0", + 0x00000431 => "\xd1", + 0x00000432 => "\xd2", + 0x00000433 => "\xd3", + 0x00000434 => "\xd4", + 0x00000435 => "\xd5", + 0x00000436 => "\xd6", + 0x00000437 => "\xd7", + 0x00000438 => "\xd8", + 0x00000439 => "\xd9", + 0x0000043a => "\xda", + 0x0000043b => "\xdb", + 0x0000043c => "\xdc", + 0x0000043d => "\xdd", + 0x0000043e => "\xde", + 0x0000043f => "\xdf", + 0x00000440 => "\xe0", + 0x00000441 => "\xe1", + 0x00000442 => "\xe2", + 0x00000443 => "\xe3", + 0x00000444 => "\xe4", + 0x00000445 => "\xe5", + 0x00000446 => "\xe6", + 0x00000447 => "\xe7", + 0x00000448 => "\xe8", + 0x00000449 => "\xe9", + 0x0000044a => "\xea", + 0x0000044b => "\xeb", + 0x0000044c => "\xec", + 0x0000044d => "\xed", + 0x0000044e => "\xee", + 0x0000044f => "\xef", + 0x00000451 => "\xf1", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::GOST_19768_74 - Conversion routines for GOST_19768_74 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for GOST_19768-74. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ST_SEV_358-88 + alias ISO-IR-153 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000401 | CYRILLIC CAPITAL LETTER IO + AD | 000000AD | SOFT HYPHEN + B0 | 00000410 | CYRILLIC CAPITAL LETTER A + B1 | 00000411 | CYRILLIC CAPITAL LETTER BE + B2 | 00000412 | CYRILLIC CAPITAL LETTER VE + B3 | 00000413 | CYRILLIC CAPITAL LETTER GHE + B4 | 00000414 | CYRILLIC CAPITAL LETTER DE + B5 | 00000415 | CYRILLIC CAPITAL LETTER IE + B6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + B7 | 00000417 | CYRILLIC CAPITAL LETTER ZE + B8 | 00000418 | CYRILLIC CAPITAL LETTER I + B9 | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + BA | 0000041A | CYRILLIC CAPITAL LETTER KA + BB | 0000041B | CYRILLIC CAPITAL LETTER EL + BC | 0000041C | CYRILLIC CAPITAL LETTER EM + BD | 0000041D | CYRILLIC CAPITAL LETTER EN + BE | 0000041E | CYRILLIC CAPITAL LETTER O + BF | 0000041F | CYRILLIC CAPITAL LETTER PE + C0 | 00000420 | CYRILLIC CAPITAL LETTER ER + C1 | 00000421 | CYRILLIC CAPITAL LETTER ES + C2 | 00000422 | CYRILLIC CAPITAL LETTER TE + C3 | 00000423 | CYRILLIC CAPITAL LETTER U + C4 | 00000424 | CYRILLIC CAPITAL LETTER EF + C5 | 00000425 | CYRILLIC CAPITAL LETTER HA + C6 | 00000426 | CYRILLIC CAPITAL LETTER TSE + C7 | 00000427 | CYRILLIC CAPITAL LETTER CHE + C8 | 00000428 | CYRILLIC CAPITAL LETTER SHA + C9 | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + CA | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + CB | 0000042B | CYRILLIC CAPITAL LETTER YERU + CC | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + CD | 0000042D | CYRILLIC CAPITAL LETTER E + CE | 0000042E | CYRILLIC CAPITAL LETTER YU + CF | 0000042F | CYRILLIC CAPITAL LETTER YA + D0 | 00000430 | CYRILLIC SMALL LETTER A + D1 | 00000431 | CYRILLIC SMALL LETTER BE + D2 | 00000432 | CYRILLIC SMALL LETTER VE + D3 | 00000433 | CYRILLIC SMALL LETTER GHE + D4 | 00000434 | CYRILLIC SMALL LETTER DE + D5 | 00000435 | CYRILLIC SMALL LETTER IE + D6 | 00000436 | CYRILLIC SMALL LETTER ZHE + D7 | 00000437 | CYRILLIC SMALL LETTER ZE + D8 | 00000438 | CYRILLIC SMALL LETTER I + D9 | 00000439 | CYRILLIC SMALL LETTER SHORT I + DA | 0000043A | CYRILLIC SMALL LETTER KA + DB | 0000043B | CYRILLIC SMALL LETTER EL + DC | 0000043C | CYRILLIC SMALL LETTER EM + DD | 0000043D | CYRILLIC SMALL LETTER EN + DE | 0000043E | CYRILLIC SMALL LETTER O + DF | 0000043F | CYRILLIC SMALL LETTER PE + E0 | 00000440 | CYRILLIC SMALL LETTER ER + E1 | 00000441 | CYRILLIC SMALL LETTER ES + E2 | 00000442 | CYRILLIC SMALL LETTER TE + E3 | 00000443 | CYRILLIC SMALL LETTER U + E4 | 00000444 | CYRILLIC SMALL LETTER EF + E5 | 00000445 | CYRILLIC SMALL LETTER HA + E6 | 00000446 | CYRILLIC SMALL LETTER TSE + E7 | 00000447 | CYRILLIC SMALL LETTER CHE + E8 | 00000448 | CYRILLIC SMALL LETTER SHA + E9 | 00000449 | CYRILLIC SMALL LETTER SHCHA + EA | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + EB | 0000044B | CYRILLIC SMALL LETTER YERU + EC | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + ED | 0000044D | CYRILLIC SMALL LETTER E + EE | 0000044E | CYRILLIC SMALL LETTER YU + EF | 0000044F | CYRILLIC SMALL LETTER YA + F1 | 00000451 | CYRILLIC SMALL LETTER IO + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/GREEK7.pm b/lib/Locale/RecodeData/GREEK7.pm new file mode 100644 index 0000000..67dc76e --- /dev/null +++ b/lib/Locale/RecodeData/GREEK7.pm @@ -0,0 +1,879 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for GREEK7. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::GREEK7; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 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, + 0x0040, + 0x0391, + 0x0392, + 0x0393, + 0x0394, + 0x0395, + 0x0396, + 0x0397, + 0x0398, + 0x0399, + 0xfffd, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x039e, + 0x039f, + 0x03a0, + 0x03a1, + 0x03a3, + 0x03a4, + 0x03a5, + 0x03a6, + 0xfffd, + 0x03a7, + 0x03a8, + 0x03a9, + 0x005b, + 0x005c, + 0x005d, + 0x005e, + 0x005f, + 0x0060, + 0x03b1, + 0x03b2, + 0x03b3, + 0x03b4, + 0x03b5, + 0x03b6, + 0x03b7, + 0x03b8, + 0x03b9, + 0xfffd, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03be, + 0x03bf, + 0x03c0, + 0x03c1, + 0x03c3, + 0x03c4, + 0x03c5, + 0x03c6, + 0x03c2, + 0x03c7, + 0x03c8, + 0x03c9, + 0x007b, + 0x007c, + 0x007d, + 0x203e, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\xc2\xa4", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\xce\x91", + "\xce\x92", + "\xce\x93", + "\xce\x94", + "\xce\x95", + "\xce\x96", + "\xce\x97", + "\xce\x98", + "\xce\x99", + "\xef\xbf\xbd", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xce\x9e", + "\xce\x9f", + "\xce\xa0", + "\xce\xa1", + "\xce\xa3", + "\xce\xa4", + "\xce\xa5", + "\xce\xa6", + "\xef\xbf\xbd", + "\xce\xa7", + "\xce\xa8", + "\xce\xa9", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xce\xb4", + "\xce\xb5", + "\xce\xb6", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xef\xbf\xbd", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbe", + "\xce\xbf", + "\xcf\x80", + "\xcf\x81", + "\xcf\x83", + "\xcf\x84", + "\xcf\x85", + "\xcf\x86", + "\xcf\x82", + "\xcf\x87", + "\xcf\x88", + "\xcf\x89", + "\x7b", + "\x7c", + "\x7d", + "\xe2\x80\xbe", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007f => "\x7f", + 0x000000a4 => "\x24", + 0x00000391 => "\x41", + 0x00000392 => "\x42", + 0x00000393 => "\x43", + 0x00000394 => "\x44", + 0x00000395 => "\x45", + 0x00000396 => "\x46", + 0x00000397 => "\x47", + 0x00000398 => "\x48", + 0x00000399 => "\x49", + 0x0000039a => "\x4b", + 0x0000039b => "\x4c", + 0x0000039c => "\x4d", + 0x0000039d => "\x4e", + 0x0000039e => "\x4f", + 0x0000039f => "\x50", + 0x000003a0 => "\x51", + 0x000003a1 => "\x52", + 0x000003a3 => "\x53", + 0x000003a4 => "\x54", + 0x000003a5 => "\x55", + 0x000003a6 => "\x56", + 0x000003a7 => "\x58", + 0x000003a8 => "\x59", + 0x000003a9 => "\x5a", + 0x000003b1 => "\x61", + 0x000003b2 => "\x62", + 0x000003b3 => "\x63", + 0x000003b4 => "\x64", + 0x000003b5 => "\x65", + 0x000003b6 => "\x66", + 0x000003b7 => "\x67", + 0x000003b8 => "\x68", + 0x000003b9 => "\x69", + 0x000003ba => "\x6b", + 0x000003bb => "\x6c", + 0x000003bc => "\x6d", + 0x000003bd => "\x6e", + 0x000003be => "\x6f", + 0x000003bf => "\x70", + 0x000003c0 => "\x71", + 0x000003c1 => "\x72", + 0x000003c2 => "\x77", + 0x000003c3 => "\x73", + 0x000003c4 => "\x74", + 0x000003c5 => "\x75", + 0x000003c6 => "\x76", + 0x000003c7 => "\x78", + 0x000003c8 => "\x79", + 0x000003c9 => "\x7a", + 0x0000203e => "\x7e", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::GREEK7 - Conversion routines for GREEK7 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for GREEK7. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: ECMA registry + alias ISO-IR-88 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 000000A4 | CURRENCY SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000391 | GREEK CAPITAL LETTER ALPHA + 42 | 00000392 | GREEK CAPITAL LETTER BETA + 43 | 00000393 | GREEK CAPITAL LETTER GAMMA + 44 | 00000394 | GREEK CAPITAL LETTER DELTA + 45 | 00000395 | GREEK CAPITAL LETTER EPSILON + 46 | 00000396 | GREEK CAPITAL LETTER ZETA + 47 | 00000397 | GREEK CAPITAL LETTER ETA + 48 | 00000398 | GREEK CAPITAL LETTER THETA + 49 | 00000399 | GREEK CAPITAL LETTER IOTA + 4B | 0000039A | GREEK CAPITAL LETTER KAPPA + 4C | 0000039B | GREEK CAPITAL LETTER LAMDA + 4D | 0000039C | GREEK CAPITAL LETTER MU + 4E | 0000039D | GREEK CAPITAL LETTER NU + 4F | 0000039E | GREEK CAPITAL LETTER XI + 50 | 0000039F | GREEK CAPITAL LETTER OMICRON + 51 | 000003A0 | GREEK CAPITAL LETTER PI + 52 | 000003A1 | GREEK CAPITAL LETTER RHO + 53 | 000003A3 | GREEK CAPITAL LETTER SIGMA + 54 | 000003A4 | GREEK CAPITAL LETTER TAU + 55 | 000003A5 | GREEK CAPITAL LETTER UPSILON + 56 | 000003A6 | GREEK CAPITAL LETTER PHI + 58 | 000003A7 | GREEK CAPITAL LETTER CHI + 59 | 000003A8 | GREEK CAPITAL LETTER PSI + 5A | 000003A9 | GREEK CAPITAL LETTER OMEGA + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 000003B1 | GREEK SMALL LETTER ALPHA + 62 | 000003B2 | GREEK SMALL LETTER BETA + 63 | 000003B3 | GREEK SMALL LETTER GAMMA + 64 | 000003B4 | GREEK SMALL LETTER DELTA + 65 | 000003B5 | GREEK SMALL LETTER EPSILON + 66 | 000003B6 | GREEK SMALL LETTER ZETA + 67 | 000003B7 | GREEK SMALL LETTER ETA + 68 | 000003B8 | GREEK SMALL LETTER THETA + 69 | 000003B9 | GREEK SMALL LETTER IOTA + 6B | 000003BA | GREEK SMALL LETTER KAPPA + 6C | 000003BB | GREEK SMALL LETTER LAMDA + 6D | 000003BC | GREEK SMALL LETTER MU + 6E | 000003BD | GREEK SMALL LETTER NU + 6F | 000003BE | GREEK SMALL LETTER XI + 70 | 000003BF | GREEK SMALL LETTER OMICRON + 71 | 000003C0 | GREEK SMALL LETTER PI + 72 | 000003C1 | GREEK SMALL LETTER RHO + 73 | 000003C3 | GREEK SMALL LETTER SIGMA + 74 | 000003C4 | GREEK SMALL LETTER TAU + 75 | 000003C5 | GREEK SMALL LETTER UPSILON + 76 | 000003C6 | GREEK SMALL LETTER PHI + 77 | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + 78 | 000003C7 | GREEK SMALL LETTER CHI + 79 | 000003C8 | GREEK SMALL LETTER PSI + 7A | 000003C9 | GREEK SMALL LETTER OMEGA + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000203E | OVERLINE + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/GREEK7_OLD.pm b/lib/Locale/RecodeData/GREEK7_OLD.pm new file mode 100644 index 0000000..ea87ea2 --- /dev/null +++ b/lib/Locale/RecodeData/GREEK7_OLD.pm @@ -0,0 +1,882 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for GREEK7-OLD. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::GREEK7_OLD; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00a3, + 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, + 0x00b4, + 0x03b1, + 0x03b2, + 0x03c8, + 0x03b4, + 0x03b5, + 0x03c6, + 0x03b3, + 0x03b7, + 0x03b9, + 0x03be, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03bf, + 0x03c0, + 0x037a, + 0x03c1, + 0x03c3, + 0x03c4, + 0x03b8, + 0x03c9, + 0x03c2, + 0x03c7, + 0x03c5, + 0x03b6, + 0x1fcf, + 0x1fbf, + 0x1fce, + 0x007e, + 0x005f, + 0x0060, + 0x0391, + 0x0392, + 0x03a8, + 0x0394, + 0x0395, + 0x03a6, + 0x0393, + 0x0397, + 0x0399, + 0x039e, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x039f, + 0x03a0, + 0xfffd, + 0x03a1, + 0x03a3, + 0x03a4, + 0x0398, + 0x03a9, + 0x00b7, + 0x03a7, + 0x03a5, + 0x0396, + 0x1fdf, + 0x1ffe, + 0x1fde, + 0x00a8, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\xc2\xa3", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\xc2\xb4", + "\xce\xb1", + "\xce\xb2", + "\xcf\x88", + "\xce\xb4", + "\xce\xb5", + "\xcf\x86", + "\xce\xb3", + "\xce\xb7", + "\xce\xb9", + "\xce\xbe", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbf", + "\xcf\x80", + "\xcd\xba", + "\xcf\x81", + "\xcf\x83", + "\xcf\x84", + "\xce\xb8", + "\xcf\x89", + "\xcf\x82", + "\xcf\x87", + "\xcf\x85", + "\xce\xb6", + "\xe1\xbf\x8f", + "\xe1\xbe\xbf", + "\xe1\xbf\x8e", + "\x7e", + "\x5f", + "\x60", + "\xce\x91", + "\xce\x92", + "\xce\xa8", + "\xce\x94", + "\xce\x95", + "\xce\xa6", + "\xce\x93", + "\xce\x97", + "\xce\x99", + "\xce\x9e", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xce\x9f", + "\xce\xa0", + "\xef\xbf\xbd", + "\xce\xa1", + "\xce\xa3", + "\xce\xa4", + "\xce\x98", + "\xce\xa9", + "\xc2\xb7", + "\xce\xa7", + "\xce\xa5", + "\xce\x96", + "\xe1\xbf\x9f", + "\xe1\xbf\xbe", + "\xe1\xbf\x9e", + "\xc2\xa8", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x0000007e => "\x5e", + 0x0000007f => "\x7f", + 0x000000a3 => "\x23", + 0x000000a8 => "\x7e", + 0x000000b4 => "\x40", + 0x000000b7 => "\x77", + 0x0000037a => "\x51", + 0x00000391 => "\x61", + 0x00000392 => "\x62", + 0x00000393 => "\x67", + 0x00000394 => "\x64", + 0x00000395 => "\x65", + 0x00000396 => "\x7a", + 0x00000397 => "\x68", + 0x00000398 => "\x75", + 0x00000399 => "\x69", + 0x0000039a => "\x6b", + 0x0000039b => "\x6c", + 0x0000039c => "\x6d", + 0x0000039d => "\x6e", + 0x0000039e => "\x6a", + 0x0000039f => "\x6f", + 0x000003a0 => "\x70", + 0x000003a1 => "\x72", + 0x000003a3 => "\x73", + 0x000003a4 => "\x74", + 0x000003a5 => "\x79", + 0x000003a6 => "\x66", + 0x000003a7 => "\x78", + 0x000003a8 => "\x63", + 0x000003a9 => "\x76", + 0x000003b1 => "\x41", + 0x000003b2 => "\x42", + 0x000003b3 => "\x47", + 0x000003b4 => "\x44", + 0x000003b5 => "\x45", + 0x000003b6 => "\x5a", + 0x000003b7 => "\x48", + 0x000003b8 => "\x55", + 0x000003b9 => "\x49", + 0x000003ba => "\x4b", + 0x000003bb => "\x4c", + 0x000003bc => "\x4d", + 0x000003bd => "\x4e", + 0x000003be => "\x4a", + 0x000003bf => "\x4f", + 0x000003c0 => "\x50", + 0x000003c1 => "\x52", + 0x000003c2 => "\x57", + 0x000003c3 => "\x53", + 0x000003c4 => "\x54", + 0x000003c5 => "\x59", + 0x000003c6 => "\x46", + 0x000003c7 => "\x58", + 0x000003c8 => "\x43", + 0x000003c9 => "\x56", + 0x00001fbf => "\x5c", + 0x00001fce => "\x5d", + 0x00001fcf => "\x5b", + 0x00001fde => "\x7d", + 0x00001fdf => "\x7b", + 0x00001ffe => "\x7c", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::GREEK7_OLD - Conversion routines for GREEK7_OLD + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for GREEK7-OLD. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-18 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 000000A3 | POUND SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 000000B4 | ACUTE ACCENT + 41 | 000003B1 | GREEK SMALL LETTER ALPHA + 42 | 000003B2 | GREEK SMALL LETTER BETA + 43 | 000003C8 | GREEK SMALL LETTER PSI + 44 | 000003B4 | GREEK SMALL LETTER DELTA + 45 | 000003B5 | GREEK SMALL LETTER EPSILON + 46 | 000003C6 | GREEK SMALL LETTER PHI + 47 | 000003B3 | GREEK SMALL LETTER GAMMA + 48 | 000003B7 | GREEK SMALL LETTER ETA + 49 | 000003B9 | GREEK SMALL LETTER IOTA + 4A | 000003BE | GREEK SMALL LETTER XI + 4B | 000003BA | GREEK SMALL LETTER KAPPA + 4C | 000003BB | GREEK SMALL LETTER LAMDA + 4D | 000003BC | GREEK SMALL LETTER MU + 4E | 000003BD | GREEK SMALL LETTER NU + 4F | 000003BF | GREEK SMALL LETTER OMICRON + 50 | 000003C0 | GREEK SMALL LETTER PI + 51 | 0000037A | GREEK YPOGEGRAMMENI + 52 | 000003C1 | GREEK SMALL LETTER RHO + 53 | 000003C3 | GREEK SMALL LETTER SIGMA + 54 | 000003C4 | GREEK SMALL LETTER TAU + 55 | 000003B8 | GREEK SMALL LETTER THETA + 56 | 000003C9 | GREEK SMALL LETTER OMEGA + 57 | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + 58 | 000003C7 | GREEK SMALL LETTER CHI + 59 | 000003C5 | GREEK SMALL LETTER UPSILON + 5A | 000003B6 | GREEK SMALL LETTER ZETA + 5B | 00001FCF | GREEK PSILI AND PERISPOMENI + 5C | 00001FBF | GREEK PSILI + 5D | 00001FCE | GREEK PSILI AND OXIA + 5E | 0000007E | TILDE + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000391 | GREEK CAPITAL LETTER ALPHA + 62 | 00000392 | GREEK CAPITAL LETTER BETA + 63 | 000003A8 | GREEK CAPITAL LETTER PSI + 64 | 00000394 | GREEK CAPITAL LETTER DELTA + 65 | 00000395 | GREEK CAPITAL LETTER EPSILON + 66 | 000003A6 | GREEK CAPITAL LETTER PHI + 67 | 00000393 | GREEK CAPITAL LETTER GAMMA + 68 | 00000397 | GREEK CAPITAL LETTER ETA + 69 | 00000399 | GREEK CAPITAL LETTER IOTA + 6A | 0000039E | GREEK CAPITAL LETTER XI + 6B | 0000039A | GREEK CAPITAL LETTER KAPPA + 6C | 0000039B | GREEK CAPITAL LETTER LAMDA + 6D | 0000039C | GREEK CAPITAL LETTER MU + 6E | 0000039D | GREEK CAPITAL LETTER NU + 6F | 0000039F | GREEK CAPITAL LETTER OMICRON + 70 | 000003A0 | GREEK CAPITAL LETTER PI + 72 | 000003A1 | GREEK CAPITAL LETTER RHO + 73 | 000003A3 | GREEK CAPITAL LETTER SIGMA + 74 | 000003A4 | GREEK CAPITAL LETTER TAU + 75 | 00000398 | GREEK CAPITAL LETTER THETA + 76 | 000003A9 | GREEK CAPITAL LETTER OMEGA + 77 | 000000B7 | MIDDLE DOT + 78 | 000003A7 | GREEK CAPITAL LETTER CHI + 79 | 000003A5 | GREEK CAPITAL LETTER UPSILON + 7A | 00000396 | GREEK CAPITAL LETTER ZETA + 7B | 00001FDF | GREEK DASIA AND PERISPOMENI + 7C | 00001FFE | GREEK DASIA + 7D | 00001FDE | GREEK DASIA AND OXIA + 7E | 000000A8 | DIAERESIS + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/GREEK_CCITT.pm b/lib/Locale/RecodeData/GREEK_CCITT.pm new file mode 100644 index 0000000..c89d617 --- /dev/null +++ b/lib/Locale/RecodeData/GREEK_CCITT.pm @@ -0,0 +1,877 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for GREEK-CCITT. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::GREEK_CCITT; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 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, + 0x0040, + 0x0391, + 0x0392, + 0x0393, + 0x0394, + 0x0395, + 0x0396, + 0x0397, + 0x0398, + 0x0399, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x039e, + 0x039f, + 0x03a0, + 0x03a1, + 0xfffd, + 0x03a3, + 0x03a4, + 0x03a5, + 0x03a6, + 0x03a7, + 0x03a8, + 0x03a9, + 0xfffd, + 0x005b, + 0x005c, + 0x005d, + 0x005e, + 0x005f, + 0xfffd, + 0x03b1, + 0x03b2, + 0x03b3, + 0x03b4, + 0x03b5, + 0x03b6, + 0x03b7, + 0x03b8, + 0x03b9, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03be, + 0x03bf, + 0x03c0, + 0x03c1, + 0x03c2, + 0x03c3, + 0x03c4, + 0x03c5, + 0x03c6, + 0x03c7, + 0x03c8, + 0x03c9, + 0xfffd, + 0x007b, + 0x007c, + 0x007d, + 0x00af, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\xc2\xa4", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\xce\x91", + "\xce\x92", + "\xce\x93", + "\xce\x94", + "\xce\x95", + "\xce\x96", + "\xce\x97", + "\xce\x98", + "\xce\x99", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xce\x9e", + "\xce\x9f", + "\xce\xa0", + "\xce\xa1", + "\xef\xbf\xbd", + "\xce\xa3", + "\xce\xa4", + "\xce\xa5", + "\xce\xa6", + "\xce\xa7", + "\xce\xa8", + "\xce\xa9", + "\xef\xbf\xbd", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\xef\xbf\xbd", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xce\xb4", + "\xce\xb5", + "\xce\xb6", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbe", + "\xce\xbf", + "\xcf\x80", + "\xcf\x81", + "\xcf\x82", + "\xcf\x83", + "\xcf\x84", + "\xcf\x85", + "\xcf\x86", + "\xcf\x87", + "\xcf\x88", + "\xcf\x89", + "\xef\xbf\xbd", + "\x7b", + "\x7c", + "\x7d", + "\xc2\xaf", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007f => "\x7f", + 0x000000a4 => "\x24", + 0x000000af => "\x7e", + 0x00000391 => "\x41", + 0x00000392 => "\x42", + 0x00000393 => "\x43", + 0x00000394 => "\x44", + 0x00000395 => "\x45", + 0x00000396 => "\x46", + 0x00000397 => "\x47", + 0x00000398 => "\x48", + 0x00000399 => "\x49", + 0x0000039a => "\x4a", + 0x0000039b => "\x4b", + 0x0000039c => "\x4c", + 0x0000039d => "\x4d", + 0x0000039e => "\x4e", + 0x0000039f => "\x4f", + 0x000003a0 => "\x50", + 0x000003a1 => "\x51", + 0x000003a3 => "\x53", + 0x000003a4 => "\x54", + 0x000003a5 => "\x55", + 0x000003a6 => "\x56", + 0x000003a7 => "\x57", + 0x000003a8 => "\x58", + 0x000003a9 => "\x59", + 0x000003b1 => "\x61", + 0x000003b2 => "\x62", + 0x000003b3 => "\x63", + 0x000003b4 => "\x64", + 0x000003b5 => "\x65", + 0x000003b6 => "\x66", + 0x000003b7 => "\x67", + 0x000003b8 => "\x68", + 0x000003b9 => "\x69", + 0x000003ba => "\x6a", + 0x000003bb => "\x6b", + 0x000003bc => "\x6c", + 0x000003bd => "\x6d", + 0x000003be => "\x6e", + 0x000003bf => "\x6f", + 0x000003c0 => "\x70", + 0x000003c1 => "\x71", + 0x000003c2 => "\x72", + 0x000003c3 => "\x73", + 0x000003c4 => "\x74", + 0x000003c5 => "\x75", + 0x000003c6 => "\x76", + 0x000003c7 => "\x77", + 0x000003c8 => "\x78", + 0x000003c9 => "\x79", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::GREEK_CCITT - Conversion routines for GREEK_CCITT + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for GREEK-CCITT. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: ECMA registry + alias ISO-IR-150 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 000000A4 | CURRENCY SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000391 | GREEK CAPITAL LETTER ALPHA + 42 | 00000392 | GREEK CAPITAL LETTER BETA + 43 | 00000393 | GREEK CAPITAL LETTER GAMMA + 44 | 00000394 | GREEK CAPITAL LETTER DELTA + 45 | 00000395 | GREEK CAPITAL LETTER EPSILON + 46 | 00000396 | GREEK CAPITAL LETTER ZETA + 47 | 00000397 | GREEK CAPITAL LETTER ETA + 48 | 00000398 | GREEK CAPITAL LETTER THETA + 49 | 00000399 | GREEK CAPITAL LETTER IOTA + 4A | 0000039A | GREEK CAPITAL LETTER KAPPA + 4B | 0000039B | GREEK CAPITAL LETTER LAMDA + 4C | 0000039C | GREEK CAPITAL LETTER MU + 4D | 0000039D | GREEK CAPITAL LETTER NU + 4E | 0000039E | GREEK CAPITAL LETTER XI + 4F | 0000039F | GREEK CAPITAL LETTER OMICRON + 50 | 000003A0 | GREEK CAPITAL LETTER PI + 51 | 000003A1 | GREEK CAPITAL LETTER RHO + 53 | 000003A3 | GREEK CAPITAL LETTER SIGMA + 54 | 000003A4 | GREEK CAPITAL LETTER TAU + 55 | 000003A5 | GREEK CAPITAL LETTER UPSILON + 56 | 000003A6 | GREEK CAPITAL LETTER PHI + 57 | 000003A7 | GREEK CAPITAL LETTER CHI + 58 | 000003A8 | GREEK CAPITAL LETTER PSI + 59 | 000003A9 | GREEK CAPITAL LETTER OMEGA + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 61 | 000003B1 | GREEK SMALL LETTER ALPHA + 62 | 000003B2 | GREEK SMALL LETTER BETA + 63 | 000003B3 | GREEK SMALL LETTER GAMMA + 64 | 000003B4 | GREEK SMALL LETTER DELTA + 65 | 000003B5 | GREEK SMALL LETTER EPSILON + 66 | 000003B6 | GREEK SMALL LETTER ZETA + 67 | 000003B7 | GREEK SMALL LETTER ETA + 68 | 000003B8 | GREEK SMALL LETTER THETA + 69 | 000003B9 | GREEK SMALL LETTER IOTA + 6A | 000003BA | GREEK SMALL LETTER KAPPA + 6B | 000003BB | GREEK SMALL LETTER LAMDA + 6C | 000003BC | GREEK SMALL LETTER MU + 6D | 000003BD | GREEK SMALL LETTER NU + 6E | 000003BE | GREEK SMALL LETTER XI + 6F | 000003BF | GREEK SMALL LETTER OMICRON + 70 | 000003C0 | GREEK SMALL LETTER PI + 71 | 000003C1 | GREEK SMALL LETTER RHO + 72 | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + 73 | 000003C3 | GREEK SMALL LETTER SIGMA + 74 | 000003C4 | GREEK SMALL LETTER TAU + 75 | 000003C5 | GREEK SMALL LETTER UPSILON + 76 | 000003C6 | GREEK SMALL LETTER PHI + 77 | 000003C7 | GREEK SMALL LETTER CHI + 78 | 000003C8 | GREEK SMALL LETTER PSI + 79 | 000003C9 | GREEK SMALL LETTER OMEGA + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 000000AF | MACRON + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/HP_ROMAN8.pm b/lib/Locale/RecodeData/HP_ROMAN8.pm new file mode 100644 index 0000000..43e9cea --- /dev/null +++ b/lib/Locale/RecodeData/HP_ROMAN8.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for HP-ROMAN8. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::HP_ROMAN8; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc3\x80", + "\xc3\x82", + "\xc3\x88", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8e", + "\xc3\x8f", + "\xc2\xb4", + "\xcb\x8b", + "\xcb\x86", + "\xc2\xa8", + "\xcb\x9c", + "\xc3\x99", + "\xc3\x9b", + "\xe2\x82\xa4", + "\xc2\xaf", + "\xc3\x9d", + "\xc3\xbd", + "\xc2\xb0", + "\xc3\x87", + "\xc3\xa7", + "\xc3\x91", + "\xc3\xb1", + "\xc2\xa1", + "\xc2\xbf", + "\xc2\xa4", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xa7", + "\xc6\x92", + "\xc2\xa2", + "\xc3\xa2", + "\xc3\xaa", + "\xc3\xb4", + "\xc3\xbb", + "\xc3\xa1", + "\xc3\xa9", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xa0", + "\xc3\xa8", + "\xc3\xb2", + "\xc3\xb9", + "\xc3\xa4", + "\xc3\xab", + "\xc3\xb6", + "\xc3\xbc", + "\xc3\x85", + "\xc3\xae", + "\xc3\x98", + "\xc3\x86", + "\xc3\xa5", + "\xc3\xad", + "\xc3\xb8", + "\xc3\xa6", + "\xc3\x84", + "\xc3\xac", + "\xc3\x96", + "\xc3\x9c", + "\xc3\x89", + "\xc3\xaf", + "\xc3\x9f", + "\xc3\x94", + "\xc3\x81", + "\xc3\x83", + "\xc3\xa3", + "\xc3\x90", + "\xc3\xb0", + "\xc3\x8d", + "\xc3\x8c", + "\xc3\x93", + "\xc3\x92", + "\xc3\x95", + "\xc3\xb5", + "\xc5\xa0", + "\xc5\xa1", + "\xc3\x9a", + "\xc5\xb8", + "\xc3\xbf", + "\xc3\x9e", + "\xc3\xbe", + "\xc2\xb7", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xbe", + "\xe2\x80\x94", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xaa", + "\xc2\xba", + "\xc2\xab", + "\xe2\x96\xa0", + "\xc2\xbb", + "\xc2\xb1", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a1 => "\xb8", + 0x000000a2 => "\xbf", + 0x000000a3 => "\xbb", + 0x000000a4 => "\xba", + 0x000000a5 => "\xbc", + 0x000000a7 => "\xbd", + 0x000000a8 => "\xab", + 0x000000aa => "\xf9", + 0x000000ab => "\xfb", + 0x000000af => "\xb0", + 0x000000b0 => "\xb3", + 0x000000b1 => "\xfe", + 0x000000b4 => "\xa8", + 0x000000b5 => "\xf3", + 0x000000b6 => "\xf4", + 0x000000b7 => "\xf2", + 0x000000ba => "\xfa", + 0x000000bb => "\xfd", + 0x000000bc => "\xf7", + 0x000000bd => "\xf8", + 0x000000be => "\xf5", + 0x000000bf => "\xb9", + 0x000000c0 => "\xa1", + 0x000000c1 => "\xe0", + 0x000000c2 => "\xa2", + 0x000000c3 => "\xe1", + 0x000000c4 => "\xd8", + 0x000000c5 => "\xd0", + 0x000000c6 => "\xd3", + 0x000000c7 => "\xb4", + 0x000000c8 => "\xa3", + 0x000000c9 => "\xdc", + 0x000000ca => "\xa4", + 0x000000cb => "\xa5", + 0x000000cc => "\xe6", + 0x000000cd => "\xe5", + 0x000000ce => "\xa6", + 0x000000cf => "\xa7", + 0x000000d0 => "\xe3", + 0x000000d1 => "\xb6", + 0x000000d2 => "\xe8", + 0x000000d3 => "\xe7", + 0x000000d4 => "\xdf", + 0x000000d5 => "\xe9", + 0x000000d6 => "\xda", + 0x000000d8 => "\xd2", + 0x000000d9 => "\xad", + 0x000000da => "\xed", + 0x000000db => "\xae", + 0x000000dc => "\xdb", + 0x000000dd => "\xb1", + 0x000000de => "\xf0", + 0x000000df => "\xde", + 0x000000e0 => "\xc8", + 0x000000e1 => "\xc4", + 0x000000e2 => "\xc0", + 0x000000e3 => "\xe2", + 0x000000e4 => "\xcc", + 0x000000e5 => "\xd4", + 0x000000e6 => "\xd7", + 0x000000e7 => "\xb5", + 0x000000e8 => "\xc9", + 0x000000e9 => "\xc5", + 0x000000ea => "\xc1", + 0x000000eb => "\xcd", + 0x000000ec => "\xd9", + 0x000000ed => "\xd5", + 0x000000ee => "\xd1", + 0x000000ef => "\xdd", + 0x000000f0 => "\xe4", + 0x000000f1 => "\xb7", + 0x000000f2 => "\xca", + 0x000000f3 => "\xc6", + 0x000000f4 => "\xc2", + 0x000000f5 => "\xea", + 0x000000f6 => "\xce", + 0x000000f8 => "\xd6", + 0x000000f9 => "\xcb", + 0x000000fa => "\xc7", + 0x000000fb => "\xc3", + 0x000000fc => "\xcf", + 0x000000fd => "\xb2", + 0x000000fe => "\xf1", + 0x000000ff => "\xef", + 0x00000160 => "\xeb", + 0x00000161 => "\xec", + 0x00000178 => "\xee", + 0x00000192 => "\xbe", + 0x000002c6 => "\xaa", + 0x000002cb => "\xa9", + 0x000002dc => "\xac", + 0x00002014 => "\xf6", + 0x000020a4 => "\xaf", + 0x000025a0 => "\xfc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::HP_ROMAN8 - Conversion routines for HP_ROMAN8 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for HP-ROMAN8. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: LaserJet IIP Printer User's Manual, + HP part no 33471-90901, Hewlet-Packard, June 1989. + alias ROMAN8 + alias R8 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + A2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + A3 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + A4 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + A5 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + A6 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + A7 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + A8 | 000000B4 | ACUTE ACCENT + A9 | 000002CB | MODIFIER LETTER GRAVE ACCENT (Mandarin Chinese fourth tone) + AA | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + AB | 000000A8 | DIAERESIS + AC | 000002DC | SMALL TILDE + AD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + AE | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + AF | 000020A4 | LIRA SIGN + B0 | 000000AF | MACRON + B1 | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + B2 | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + B3 | 000000B0 | DEGREE SIGN + B4 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + B5 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + B6 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + B7 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + B8 | 000000A1 | INVERTED EXCLAMATION MARK + B9 | 000000BF | INVERTED QUESTION MARK + BA | 000000A4 | CURRENCY SIGN + BB | 000000A3 | POUND SIGN + BC | 000000A5 | YEN SIGN + BD | 000000A7 | SECTION SIGN + BE | 00000192 | LATIN SMALL LETTER F WITH HOOK + BF | 000000A2 | CENT SIGN + C0 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + C1 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + C2 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + C3 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + C4 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + C5 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + C6 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + C7 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + C8 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + C9 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + CA | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CB | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + CC | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + CD | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + CE | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CF | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + D0 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + D1 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + D2 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D3 | 000000C6 | LATIN CAPITAL LETTER AE + D4 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + D5 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + D6 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + D7 | 000000E6 | LATIN SMALL LETTER AE + D8 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + D9 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + DA | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + DB | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DC | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + DD | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + DE | 000000DF | LATIN SMALL LETTER SHARP S (German) + DF | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + E0 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + E1 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + E2 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E3 | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + E4 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + E5 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + E6 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + E7 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + E8 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + E9 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + EA | 000000F5 | LATIN SMALL LETTER O WITH TILDE + EB | 00000160 | LATIN CAPITAL LETTER S WITH CARON + EC | 00000161 | LATIN SMALL LETTER S WITH CARON + ED | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + EE | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + EF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + F0 | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + F1 | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + F2 | 000000B7 | MIDDLE DOT + F3 | 000000B5 | MICRO SIGN + F4 | 000000B6 | PILCROW SIGN + F5 | 000000BE | VULGAR FRACTION THREE QUARTERS + F6 | 00002014 | EM DASH + F7 | 000000BC | VULGAR FRACTION ONE QUARTER + F8 | 000000BD | VULGAR FRACTION ONE HALF + F9 | 000000AA | FEMININE ORDINAL INDICATOR + FA | 000000BA | MASCULINE ORDINAL INDICATOR + FB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + FC | 000025A0 | BLACK SQUARE + FD | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + FE | 000000B1 | PLUS-MINUS SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM037.pm b/lib/Locale/RecodeData/IBM037.pm new file mode 100644 index 0000000..2aa1f8a --- /dev/null +++ b/lib/Locale/RecodeData/IBM037.pm @@ -0,0 +1,1144 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM037. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM037; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00f1, + 0x00a2, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x0021, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x00d1, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x00a4, + 0x00b5, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x005e, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x005b, + 0x005d, + 0x00af, + 0x00a8, + 0x00b4, + 0x00d7, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x00fc, + 0x00f9, + 0x00fa, + 0x00ff, + 0x005c, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x00d6, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xb1", + "\xc2\xa2", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\x21", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\xc3\x91", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\xc2\xa4", + "\xc2\xb5", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\x5e", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\x5b", + "\x5d", + "\xc2\xaf", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\x5c", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\xc3\x96", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\xba", + 0x0000005c => "\xe0", + 0x0000005d => "\xbb", + 0x0000005e => "\xb0", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\x4a", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x6a", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\x5f", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000af => "\xbc", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xec", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xcc", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM037 - Conversion routines for IBM037 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM037. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP037 + alias EBCDIC-CP-US + alias EBCDIC-CP-CA + alias EBCDIC-CP-WT + alias EBCDIC-CP-NL + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 000000A2 | CENT SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 00000021 | EXCLAMATION MARK + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 0000005E | CIRCUMFLEX ACCENT + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 0000005B | LEFT SQUARE BRACKET + BB | 0000005D | RIGHT SQUARE BRACKET + BC | 000000AF | MACRON + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM038.pm b/lib/Locale/RecodeData/IBM038.pm new file mode 100644 index 0000000..aa85cb4 --- /dev/null +++ b/lib/Locale/RecodeData/IBM038.pm @@ -0,0 +1,949 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM038. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM038; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005c, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5c", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005c => "\xe0", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a6 => "\x6a", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM038 - Conversion routines for IBM038 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM038. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + alias EBCDIC-INT + alias CP038 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 0000005C | REVERSE SOLIDUS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM1004.pm b/lib/Locale/RecodeData/IBM1004.pm new file mode 100644 index 0000000..2843081 --- /dev/null +++ b/lib/Locale/RecodeData/IBM1004.pm @@ -0,0 +1,1123 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM1004. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM1004; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0x201a, + 0xfffd, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0x02c6, + 0x2030, + 0x0160, + 0x2039, + 0x0152, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0x02dc, + 0x2122, + 0x0161, + 0x203a, + 0x0153, + 0xfffd, + 0xfffd, + 0x0178, + 0x00a0, + 0x00a1, + 0x00a2, + 0x00a3, + 0x00a4, + 0x00a5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x00aa, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00af, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00b8, + 0x00b9, + 0x00ba, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0x00bf, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00d0, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x00d7, + 0x00d8, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x00dd, + 0x00de, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00f0, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00f7, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x00fd, + 0x00fe, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x9a", + "\xef\xbf\xbd", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xcb\x86", + "\xe2\x80\xb0", + "\xc5\xa0", + "\xe2\x80\xb9", + "\xc5\x92", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xcb\x9c", + "\xe2\x84\xa2", + "\xc5\xa1", + "\xe2\x80\xba", + "\xc5\x93", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc5\xb8", + "\xc2\xa0", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc2\xaa", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc2\xb9", + "\xc2\xba", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xbf", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x90", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc3\x98", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x9d", + "\xc3\x9e", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb0", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbd", + "\xc3\xbe", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a1 => "\xa1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000aa => "\xaa", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000b9 => "\xb9", + 0x000000ba => "\xba", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000bf => "\xbf", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d0 => "\xd0", + 0x000000d1 => "\xd1", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d8 => "\xd8", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000dd => "\xdd", + 0x000000de => "\xde", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f0 => "\xf0", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x000000fe => "\xfe", + 0x000000ff => "\xff", + 0x00000152 => "\x8c", + 0x00000153 => "\x9c", + 0x00000160 => "\x8a", + 0x00000161 => "\x9a", + 0x00000178 => "\x9f", + 0x000002c6 => "\x88", + 0x000002dc => "\x98", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM1004 - Conversion routines for IBM1004 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM1004. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: CEN/TC304 N283, 1994-02-04 + alias CP1004 + alias OS2LATIN1 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 88 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + 89 | 00002030 | PER MILLE SIGN + 8A | 00000160 | LATIN CAPITAL LETTER S WITH CARON + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 00000152 | LATIN CAPITAL LIGATURE OE + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 98 | 000002DC | SMALL TILDE + 99 | 00002122 | TRADE MARK SIGN + 9A | 00000161 | LATIN SMALL LETTER S WITH CARON + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C | 00000153 | LATIN SMALL LIGATURE OE + 9F | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000AA | FEMININE ORDINAL INDICATOR + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000BA | MASCULINE ORDINAL INDICATOR + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM1026.pm b/lib/Locale/RecodeData/IBM1026.pm new file mode 100644 index 0000000..3ccf9a6 --- /dev/null +++ b/lib/Locale/RecodeData/IBM1026.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM1026. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM1026; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0x00e3, + 0x00e5, + 0x007b, + 0x00f1, + 0x00c7, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x011e, + 0x0130, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x005b, + 0x00d1, + 0x015f, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0131, + 0x003a, + 0x00d6, + 0x015e, + 0x0027, + 0x003d, + 0x00dc, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x007d, + 0x0060, + 0x00a6, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x02db, + 0x00c6, + 0x00a4, + 0x00b5, + 0x00f6, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x005d, + 0x0024, + 0x0040, + 0x00ae, + 0x00a2, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00ac, + 0x007c, + 0x2014, + 0x00a8, + 0x00b4, + 0x00d7, + 0x00e7, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x007e, + 0x00f2, + 0x00f3, + 0x00f5, + 0x011f, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x005c, + 0x00f9, + 0x00fa, + 0x00ff, + 0x00fc, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x0023, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x0022, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\x7b", + "\xc3\xb1", + "\xc3\x87", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\xc4\x9e", + "\xc4\xb0", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\x5b", + "\xc3\x91", + "\xc5\x9f", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc4\xb1", + "\x3a", + "\xc3\x96", + "\xc5\x9e", + "\x27", + "\x3d", + "\xc3\x9c", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\x7d", + "\x60", + "\xc2\xa6", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xcb\x9b", + "\xc3\x86", + "\xc2\xa4", + "\xc2\xb5", + "\xc3\xb6", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\x5d", + "\x24", + "\x40", + "\xc2\xae", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xac", + "\x7c", + "\xe2\x80\x94", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\xc3\xa7", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\x7e", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\xc4\x9f", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\x5c", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\xc3\xbc", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\x23", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\x22", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\xfc", + 0x00000023 => "\xec", + 0x00000024 => "\xad", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\xae", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x68", + 0x0000005c => "\xdc", + 0x0000005d => "\xac", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x8d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\x48", + 0x0000007c => "\xbb", + 0x0000007d => "\x8c", + 0x0000007e => "\xcc", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x8e", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xba", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x4a", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\x7b", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\x7f", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\xc0", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xa1", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xe0", + 0x000000ff => "\xdf", + 0x0000011e => "\x5a", + 0x0000011f => "\xd0", + 0x00000130 => "\x5b", + 0x00000131 => "\x79", + 0x0000015e => "\x7c", + 0x0000015f => "\x6a", + 0x000002db => "\x9d", + 0x00002014 => "\xbc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM1026 - Conversion routines for IBM1026 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM1026. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP1026 + alias 1026 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 0000007B | LEFT CURLY BRACKET + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 0000011E | LATIN CAPITAL LETTER G WITH BREVE + 5B | 00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 0000005B | LEFT SQUARE BRACKET + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000131 | LATIN SMALL LETTER DOTLESS I + 7A | 0000003A | COLON + 7B | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 7C | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 0000007D | RIGHT CURLY BRACKET + 8D | 00000060 | GRAVE ACCENT + 8E | 000000A6 | BROKEN BAR + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000002DB | OGONEK + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 0000005D | RIGHT SQUARE BRACKET + AD | 00000024 | DOLLAR SIGN + AE | 00000040 | COMMERCIAL AT + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000AC | NOT SIGN + BB | 0000007C | VERTICAL LINE + BC | 00002014 | EM DASH + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 0000007E | TILDE + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 0000011F | LATIN SMALL LETTER G WITH BREVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 0000005C | REVERSE SOLIDUS + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 00000023 | NUMBER SIGN + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 00000022 | QUOTATION MARK + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM1047.pm b/lib/Locale/RecodeData/IBM1047.pm new file mode 100644 index 0000000..ac1b76c --- /dev/null +++ b/lib/Locale/RecodeData/IBM1047.pm @@ -0,0 +1,1142 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM1047. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM1047; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00f1, + 0x00a2, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x0021, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x00d1, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x00a4, + 0x00b5, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x005b, + 0x00de, + 0x00ae, + 0x00ac, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00dd, + 0x00a8, + 0x00af, + 0x005d, + 0x00b4, + 0x00d7, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x00fc, + 0x00f9, + 0x00fa, + 0x00ff, + 0x005c, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x00d6, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xb1", + "\xc2\xa2", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\x21", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\xc3\x91", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\xc2\xa4", + "\xc2\xb5", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\x5b", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xac", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc3\x9d", + "\xc2\xa8", + "\xc2\xaf", + "\x5d", + "\xc2\xb4", + "\xc3\x97", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\x5c", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\xc3\x96", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\xad", + 0x0000005c => "\xe0", + 0x0000005d => "\xbd", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\x4a", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x6a", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbb", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xb0", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000af => "\xbc", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xec", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xba", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xcc", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM1047 - Conversion routines for IBM1047 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM1047. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM Character Data Representation Architecture + Registry SC09-1391-00 p 150. + alias CP1047 + alias 1047 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 000000A2 | CENT SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 00000021 | EXCLAMATION MARK + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 0000005B | LEFT SQUARE BRACKET + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000AC | NOT SIGN + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + BB | 000000A8 | DIAERESIS + BC | 000000AF | MACRON + BD | 0000005D | RIGHT SQUARE BRACKET + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM256.pm b/lib/Locale/RecodeData/IBM256.pm new file mode 100644 index 0000000..2e84278 --- /dev/null +++ b/lib/Locale/RecodeData/IBM256.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM256. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM256; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00f1, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x00d1, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x00a4, + 0x00b5, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x00a2, + 0x00a3, + 0x00a5, + 0x20a7, + 0x0192, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00ac, + 0x007c, + 0x203e, + 0x00a8, + 0x00b4, + 0x2017, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x00fc, + 0x00f9, + 0x00fa, + 0x00ff, + 0x005c, + 0x2003, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x00d6, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xb1", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\xc3\x91", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\xc2\xa4", + "\xc2\xb5", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xe2\x82\xa7", + "\xc6\x92", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xac", + "\x7c", + "\xe2\x80\xbe", + "\xc2\xa8", + "\xc2\xb4", + "\xe2\x80\x97", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\x5c", + "\xe2\x80\x83", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\xc3\x96", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005c => "\xe0", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\xbb", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x6a", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xba", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xec", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xcc", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", + 0x00000192 => "\xb4", + 0x00002003 => "\xe1", + 0x00002017 => "\xbf", + 0x0000203e => "\xbc", + 0x000020a7 => "\xb3", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM256 - Conversion routines for IBM256 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM256. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM Registry C-H 3-3220-050 + alias EBCDIC-INT1 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000020A7 | PESETA SIGN + B4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000AC | NOT SIGN + BB | 0000007C | VERTICAL LINE + BC | 0000203E | OVERLINE + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 00002017 | DOUBLE LOW LINE + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 0000005C | REVERSE SOLIDUS + E1 | 00002003 | EM SPACE + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM273.pm b/lib/Locale/RecodeData/IBM273.pm new file mode 100644 index 0000000..d37705e --- /dev/null +++ b/lib/Locale/RecodeData/IBM273.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM273. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM273; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x007b, + 0x00e0, + 0x00e1, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00f1, + 0x00c4, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x007e, + 0x00dc, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x005b, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x00d1, + 0x00f6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0060, + 0x003a, + 0x0023, + 0x00a7, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x00a4, + 0x00b5, + 0x00df, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x00a2, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x0040, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00ac, + 0x007c, + 0x203e, + 0x00a8, + 0x00b4, + 0x00d7, + 0x00e4, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00a6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x00fc, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x007d, + 0x00f9, + 0x00fa, + 0x00ff, + 0x00d6, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x005c, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x005d, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\x7b", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xb1", + "\xc3\x84", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\x7e", + "\xc3\x9c", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\x5b", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\xc3\x91", + "\xc3\xb6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\x60", + "\x3a", + "\x23", + "\xc2\xa7", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\xc2\xa4", + "\xc2\xb5", + "\xc3\x9f", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\x40", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xac", + "\x7c", + "\xe2\x80\xbe", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\xc3\xa4", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc2\xa6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\xc3\xbc", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\x7d", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\xc3\x96", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\x5c", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\x5d", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\xb5", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x63", + 0x0000005c => "\xec", + 0x0000005d => "\xfc", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\x43", + 0x0000007c => "\xbb", + 0x0000007d => "\xdc", + 0x0000007e => "\x59", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\xcc", + 0x000000a7 => "\x7c", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xba", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x4a", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xe0", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\x5a", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\xa1", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\xc0", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\x6a", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xd0", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", + 0x0000203e => "\xbc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM273 - Conversion routines for IBM273 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM273. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP273 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 0000007B | LEFT CURLY BRACKET + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 0000007E | TILDE + 5A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 0000005B | LEFT SQUARE BRACKET + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 000000A7 | SECTION SIGN + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 00000040 | COMMERCIAL AT + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000AC | NOT SIGN + BB | 0000007C | VERTICAL LINE + BC | 0000203E | OVERLINE + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000A6 | BROKEN BAR + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 0000007D | RIGHT CURLY BRACKET + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 0000005C | REVERSE SOLIDUS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 0000005D | RIGHT SQUARE BRACKET + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM274.pm b/lib/Locale/RecodeData/IBM274.pm new file mode 100644 index 0000000..4af4031 --- /dev/null +++ b/lib/Locale/RecodeData/IBM274.pm @@ -0,0 +1,949 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM274. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM274; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f9, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x0023, + 0x00e0, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a8, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e9, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e8, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e7, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb9", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\x23", + "\xc3\xa0", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa8", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa9", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa8", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa7", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a8 => "\xa1", + 0x000000e0 => "\x7c", + 0x000000e7 => "\xe0", + 0x000000e8 => "\xd0", + 0x000000e9 => "\xc0", + 0x000000f9 => "\x6a", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM274 - Conversion routines for IBM274 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM274. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + alias EBCDIC-BE + alias CP274 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 000000A8 | DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM275.pm b/lib/Locale/RecodeData/IBM275.pm new file mode 100644 index 0000000..6ea2ce7 --- /dev/null +++ b/lib/Locale/RecodeData/IBM275.pm @@ -0,0 +1,949 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM275. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM275; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00c9, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0024, + 0x00c7, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e7, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e3, + 0x003a, + 0x00d5, + 0x00c3, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00f5, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00e9, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005c, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\x89", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x24", + "\xc3\x87", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa7", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa3", + "\x3a", + "\xc3\x95", + "\xc3\x83", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xb5", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc3\xa9", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5c", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000024 => "\x5a", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005c => "\xe0", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000c3 => "\x7c", + 0x000000c7 => "\x5b", + 0x000000c9 => "\x4a", + 0x000000d5 => "\x7b", + 0x000000e3 => "\x79", + 0x000000e7 => "\x6a", + 0x000000e9 => "\xd0", + 0x000000f5 => "\xc0", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM275 - Conversion routines for IBM275 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM275. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias EBCDIC-BR + alias CP275 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 5A | 00000024 | DOLLAR SIGN + 5B | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 7A | 0000003A | COLON + 7B | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + 7C | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 0000005C | REVERSE SOLIDUS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM277.pm b/lib/Locale/RecodeData/IBM277.pm new file mode 100644 index 0000000..ac58651 --- /dev/null +++ b/lib/Locale/RecodeData/IBM277.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM277. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM277; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0x00e3, + 0x007d, + 0x00e7, + 0x00f1, + 0x0023, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x00a4, + 0x00c5, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x0024, + 0x00c7, + 0x00d1, + 0x00f8, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00a6, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0060, + 0x003a, + 0x00c6, + 0x00d8, + 0x0027, + 0x003d, + 0x0022, + 0x0040, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x007b, + 0x00b8, + 0x005b, + 0x005d, + 0x00b5, + 0x00fc, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x00a2, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00ac, + 0x007c, + 0x203e, + 0x00a8, + 0x00b4, + 0x00d7, + 0x00e6, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x00e5, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x007e, + 0x00f9, + 0x00fa, + 0x00ff, + 0x005c, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x00d6, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\x7d", + "\xc3\xa7", + "\xc3\xb1", + "\x23", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\xc2\xa4", + "\xc3\x85", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\x24", + "\xc3\x87", + "\xc3\x91", + "\xc3\xb8", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc2\xa6", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\x60", + "\x3a", + "\xc3\x86", + "\xc3\x98", + "\x27", + "\x3d", + "\x22", + "\x40", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\x7b", + "\xc2\xb8", + "\x5b", + "\x5d", + "\xc2\xb5", + "\xc3\xbc", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xac", + "\x7c", + "\xe2\x80\xbe", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\xc3\xa6", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\xc3\xa5", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\x7e", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\x5c", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\xc3\x96", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x4a", + 0x00000024 => "\x67", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x80", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x9e", + 0x0000005c => "\xe0", + 0x0000005d => "\x9f", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\x9c", + 0x0000007c => "\xbb", + 0x0000007d => "\x47", + 0x0000007e => "\xdc", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x5a", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x70", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xba", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x5b", + 0x000000c6 => "\x7b", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xec", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x7c", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\xd0", + 0x000000e6 => "\xc0", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xcc", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x6a", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xa1", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", + 0x0000203e => "\xbc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM277 - Conversion routines for IBM277 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM277. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias EBCDIC-CP-DK + alias EBCDIC-CP-NO + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 0000007D | RIGHT CURLY BRACKET + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 00000023 | NUMBER SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 000000A4 | CURRENCY SIGN + 5B | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 00000024 | DOLLAR SIGN + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000A6 | BROKEN BAR + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 000000C6 | LATIN CAPITAL LETTER AE + 7C | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 00000040 | COMMERCIAL AT + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 0000007B | LEFT CURLY BRACKET + 9D | 000000B8 | CEDILLA + 9E | 0000005B | LEFT SQUARE BRACKET + 9F | 0000005D | RIGHT SQUARE BRACKET + A0 | 000000B5 | MICRO SIGN + A1 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000AC | NOT SIGN + BB | 0000007C | VERTICAL LINE + BC | 0000203E | OVERLINE + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 000000E6 | LATIN SMALL LETTER AE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 0000007E | TILDE + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM278.pm b/lib/Locale/RecodeData/IBM278.pm new file mode 100644 index 0000000..8c66b0e --- /dev/null +++ b/lib/Locale/RecodeData/IBM278.pm @@ -0,0 +1,1142 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM278. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM278; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x007b, + 0x00e0, + 0x00e1, + 0x00e3, + 0x007d, + 0x00e7, + 0x00f1, + 0x00a7, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x0060, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x00a4, + 0x00c5, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x0023, + 0x00c0, + 0x00c1, + 0x00c3, + 0x0024, + 0x00c7, + 0x00d1, + 0x00f6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00e9, + 0x003a, + 0x00c4, + 0x00d6, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x005d, + 0x00b5, + 0x00fc, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x00a2, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x005b, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00ac, + 0x007c, + 0x203e, + 0x00a8, + 0x00b4, + 0x00d7, + 0x00e4, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00a6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x00e5, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x007e, + 0x00f9, + 0x00fa, + 0x00ff, + 0x005c, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x0040, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\x7b", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\x7d", + "\xc3\xa7", + "\xc3\xb1", + "\xc2\xa7", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\x60", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\xc2\xa4", + "\xc3\x85", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\x23", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\x24", + "\xc3\x87", + "\xc3\x91", + "\xc3\xb6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\xa9", + "\x3a", + "\xc3\x84", + "\xc3\x96", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\x5d", + "\xc2\xb5", + "\xc3\xbc", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\x5b", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xac", + "\x7c", + "\xe2\x80\xbe", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\xc3\xa4", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc2\xa6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\xc3\xa5", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\x7e", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\x5c", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\x40", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x63", + 0x00000024 => "\x67", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\xec", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\xb5", + 0x0000005c => "\xe0", + 0x0000005d => "\x9f", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x51", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\x43", + 0x0000007c => "\xbb", + 0x0000007d => "\x47", + 0x0000007e => "\xdc", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x5a", + 0x000000a5 => "\xb2", + 0x000000a6 => "\xcc", + 0x000000a7 => "\x4a", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xba", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x7b", + 0x000000c5 => "\x5b", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\x7c", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\xc0", + 0x000000e5 => "\xd0", + 0x000000e6 => "\x9c", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x79", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\x6a", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xa1", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", + 0x0000203e => "\xbc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM278 - Conversion routines for IBM278 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM278. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP278 + alias EBCDIC-CP-FI + alias EBCDIC-CP-SE + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 0000007B | LEFT CURLY BRACKET + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 0000007D | RIGHT CURLY BRACKET + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 000000A7 | SECTION SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 00000060 | GRAVE ACCENT + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 000000A4 | CURRENCY SIGN + 5B | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 00000023 | NUMBER SIGN + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 00000024 | DOLLAR SIGN + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 7A | 0000003A | COLON + 7B | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 7C | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 0000005D | RIGHT SQUARE BRACKET + A0 | 000000B5 | MICRO SIGN + A1 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 0000005B | LEFT SQUARE BRACKET + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000AC | NOT SIGN + BB | 0000007C | VERTICAL LINE + BC | 0000203E | OVERLINE + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000A6 | BROKEN BAR + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 0000007E | TILDE + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 00000040 | COMMERCIAL AT + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM280.pm b/lib/Locale/RecodeData/IBM280.pm new file mode 100644 index 0000000..3e3c6d0 --- /dev/null +++ b/lib/Locale/RecodeData/IBM280.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM280. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM280; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x007b, + 0x00e1, + 0x00e3, + 0x00e5, + 0x005c, + 0x00f1, + 0x00b0, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x005d, + 0x00ea, + 0x00eb, + 0x007d, + 0x00ed, + 0x00ee, + 0x00ef, + 0x007e, + 0x00df, + 0x00e9, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x00d1, + 0x00f2, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00f9, + 0x003a, + 0x00a3, + 0x00a7, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x005b, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x00a4, + 0x00b5, + 0x00ec, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x00a2, + 0x0023, + 0x00a5, + 0x00b7, + 0x00a9, + 0x0040, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00ac, + 0x007c, + 0x203e, + 0x00a8, + 0x00b4, + 0x00d7, + 0x00e0, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x00a6, + 0x00f3, + 0x00f5, + 0x00e8, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x00fc, + 0x0060, + 0x00fa, + 0x00ff, + 0x00e7, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x00d6, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\x7b", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\x5c", + "\xc3\xb1", + "\xc2\xb0", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\x5d", + "\xc3\xaa", + "\xc3\xab", + "\x7d", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\x7e", + "\xc3\x9f", + "\xc3\xa9", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\xc3\x91", + "\xc3\xb2", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\xb9", + "\x3a", + "\xc2\xa3", + "\xc2\xa7", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\x5b", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\xc2\xa4", + "\xc2\xb5", + "\xc3\xac", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xa2", + "\x23", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\x40", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xac", + "\x7c", + "\xe2\x80\xbe", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\xc3\xa0", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc2\xa6", + "\xc3\xb3", + "\xc3\xb5", + "\xc3\xa8", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\x60", + "\xc3\xba", + "\xc3\xbf", + "\xc3\xa7", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\xc3\x96", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\xb1", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\xb5", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x90", + 0x0000005c => "\x48", + 0x0000005d => "\x51", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\xdd", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\x44", + 0x0000007c => "\xbb", + 0x0000007d => "\x54", + 0x0000007e => "\x58", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\x7b", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\xcd", + 0x000000a7 => "\x7c", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xba", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x4a", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xec", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\xc0", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\xe0", + 0x000000e8 => "\xd0", + 0x000000e9 => "\x5a", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\xa1", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\x6a", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xcc", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\x79", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", + 0x0000203e => "\xbc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM280 - Conversion routines for IBM280 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM280. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP280 + alias EBCDIC-CP-IT + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 0000007B | LEFT CURLY BRACKET + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 0000005C | REVERSE SOLIDUS + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 000000B0 | DEGREE SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 0000005D | RIGHT SQUARE BRACKET + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 0000007D | RIGHT CURLY BRACKET + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 0000007E | TILDE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 7A | 0000003A | COLON + 7B | 000000A3 | POUND SIGN + 7C | 000000A7 | SECTION SIGN + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 0000005B | LEFT SQUARE BRACKET + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 00000023 | NUMBER SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 00000040 | COMMERCIAL AT + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000AC | NOT SIGN + BB | 0000007C | VERTICAL LINE + BC | 0000203E | OVERLINE + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 000000A6 | BROKEN BAR + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 00000060 | GRAVE ACCENT + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM281.pm b/lib/Locale/RecodeData/IBM281.pm new file mode 100644 index 0000000..9eee664 --- /dev/null +++ b/lib/Locale/RecodeData/IBM281.pm @@ -0,0 +1,949 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM281. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM281; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a3, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0021, + 0x00a5, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x203e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0024, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa3", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x21", + "\xc2\xa5", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\xbe", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x24", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\xe0", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a3 => "\x4a", + 0x000000a5 => "\x5b", + 0x000000a6 => "\x6a", + 0x000000ac => "\x5f", + 0x0000203e => "\xa1", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM281 - Conversion routines for IBM281 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM281. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + alias EBCDIC-JP-E + alias CP281 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 4A | 000000A3 | POUND SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 5A | 00000021 | EXCLAMATION MARK + 5B | 000000A5 | YEN SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + A1 | 0000203E | OVERLINE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 00000024 | DOLLAR SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM284.pm b/lib/Locale/RecodeData/IBM284.pm new file mode 100644 index 0000000..ef8e836 --- /dev/null +++ b/lib/Locale/RecodeData/IBM284.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM284. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM284; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00a6, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x0023, + 0x00f1, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0060, + 0x003a, + 0x00d1, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x00a4, + 0x00b5, + 0x00a8, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x00a2, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x005e, + 0x0021, + 0x203e, + 0x007e, + 0x00b4, + 0x00d7, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x00fc, + 0x00f9, + 0x00fa, + 0x00ff, + 0x005c, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x00d6, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc2\xa6", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\x23", + "\xc3\xb1", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\x60", + "\x3a", + "\xc3\x91", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\xc2\xa4", + "\xc2\xb5", + "\xc2\xa8", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\x5e", + "\x21", + "\xe2\x80\xbe", + "\x7e", + "\xc2\xb4", + "\xc3\x97", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\x5c", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\xc3\x96", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\xbb", + 0x00000022 => "\x7f", + 0x00000023 => "\x69", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005c => "\xe0", + 0x0000005d => "\x5a", + 0x0000005e => "\xba", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007e => "\xbd", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x49", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xa1", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\x5f", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x7b", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xec", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x6a", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xcc", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", + 0x0000203e => "\xbc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM284 - Conversion routines for IBM284 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM284. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP284 + alias EBCDIC-CP-ES + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000A6 | BROKEN BAR + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 00000023 | NUMBER SIGN + 6A | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 000000A8 | DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 0000005E | CIRCUMFLEX ACCENT + BB | 00000021 | EXCLAMATION MARK + BC | 0000203E | OVERLINE + BD | 0000007E | TILDE + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM285.pm b/lib/Locale/RecodeData/IBM285.pm new file mode 100644 index 0000000..85bd962 --- /dev/null +++ b/lib/Locale/RecodeData/IBM285.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM285. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM285; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00f1, + 0x0024, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x0021, + 0x00a3, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x00d1, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x00a4, + 0x00b5, + 0x203e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x00a2, + 0x005b, + 0x00a5, + 0x00b7, + 0x00a9, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x005e, + 0x005d, + 0x007e, + 0x00a8, + 0x00b4, + 0x00d7, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x00fc, + 0x00f9, + 0x00fa, + 0x00ff, + 0x005c, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x00d6, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xb1", + "\x24", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\x21", + "\xc2\xa3", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\xc3\x91", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\xc2\xa4", + "\xc2\xb5", + "\xe2\x80\xbe", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xa2", + "\x5b", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\x5e", + "\x5d", + "\x7e", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\x5c", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\xc3\x96", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x4a", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\xb1", + 0x0000005c => "\xe0", + 0x0000005d => "\xbb", + 0x0000005e => "\xba", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007e => "\xbc", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\x5b", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x6a", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\x5f", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xec", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xcc", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", + 0x0000203e => "\xa1", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM285 - Conversion routines for IBM285 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM285. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP285 + alias EBCDIC-CP-GB + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 00000024 | DOLLAR SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 00000021 | EXCLAMATION MARK + 5B | 000000A3 | POUND SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 0000203E | OVERLINE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 0000005B | LEFT SQUARE BRACKET + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 0000005E | CIRCUMFLEX ACCENT + BB | 0000005D | RIGHT SQUARE BRACKET + BC | 0000007E | TILDE + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM290.pm b/lib/Locale/RecodeData/IBM290.pm new file mode 100644 index 0000000..73d33c3 --- /dev/null +++ b/lib/Locale/RecodeData/IBM290.pm @@ -0,0 +1,1019 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM290. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM290; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x3002, + 0x300c, + 0x300d, + 0x3001, + 0x30fb, + 0x30f2, + 0x30a1, + 0x30a3, + 0x30a5, + 0x00a3, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0x30a7, + 0x30a9, + 0x30e3, + 0x30e5, + 0x30e7, + 0x30c3, + 0xfffd, + 0x30fc, + 0xfffd, + 0x0021, + 0x00a5, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x30a2, + 0x30a4, + 0x30a6, + 0x30a8, + 0x30aa, + 0x30ab, + 0x30ad, + 0x30af, + 0x30b1, + 0x30b3, + 0xfffd, + 0x30b5, + 0x30b7, + 0x30b9, + 0x30bb, + 0x30bd, + 0x30bf, + 0x30c1, + 0x30c4, + 0x30c6, + 0x30c8, + 0x30ca, + 0x30cb, + 0x30cc, + 0x30cd, + 0x30ce, + 0xfffd, + 0xfffd, + 0x30cf, + 0x30d2, + 0x30d5, + 0xfffd, + 0x203e, + 0x30d8, + 0x30db, + 0x30de, + 0x30df, + 0x30e0, + 0x30e1, + 0x30e2, + 0x30e4, + 0x30e6, + 0xfffd, + 0x30e8, + 0x30e9, + 0x30ea, + 0x30eb, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x30ec, + 0x30ed, + 0x30ef, + 0x30f3, + 0x309b, + 0x309c, + 0xfffd, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0024, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xe3\x80\x82", + "\xe3\x80\x8c", + "\xe3\x80\x8d", + "\xe3\x80\x81", + "\xe3\x83\xbb", + "\xe3\x83\xb2", + "\xe3\x82\xa1", + "\xe3\x82\xa3", + "\xe3\x82\xa5", + "\xc2\xa3", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xe3\x82\xa7", + "\xe3\x82\xa9", + "\xe3\x83\xa3", + "\xe3\x83\xa5", + "\xe3\x83\xa7", + "\xe3\x83\x83", + "\xef\xbf\xbd", + "\xe3\x83\xbc", + "\xef\xbf\xbd", + "\x21", + "\xc2\xa5", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\xe3\x82\xa2", + "\xe3\x82\xa4", + "\xe3\x82\xa6", + "\xe3\x82\xa8", + "\xe3\x82\xaa", + "\xe3\x82\xab", + "\xe3\x82\xad", + "\xe3\x82\xaf", + "\xe3\x82\xb1", + "\xe3\x82\xb3", + "\xef\xbf\xbd", + "\xe3\x82\xb5", + "\xe3\x82\xb7", + "\xe3\x82\xb9", + "\xe3\x82\xbb", + "\xe3\x82\xbd", + "\xe3\x82\xbf", + "\xe3\x83\x81", + "\xe3\x83\x84", + "\xe3\x83\x86", + "\xe3\x83\x88", + "\xe3\x83\x8a", + "\xe3\x83\x8b", + "\xe3\x83\x8c", + "\xe3\x83\x8d", + "\xe3\x83\x8e", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe3\x83\x8f", + "\xe3\x83\x92", + "\xe3\x83\x95", + "\xef\xbf\xbd", + "\xe2\x80\xbe", + "\xe3\x83\x98", + "\xe3\x83\x9b", + "\xe3\x83\x9e", + "\xe3\x83\x9f", + "\xe3\x83\xa0", + "\xe3\x83\xa1", + "\xe3\x83\xa2", + "\xe3\x83\xa4", + "\xe3\x83\xa6", + "\xef\xbf\xbd", + "\xe3\x83\xa8", + "\xe3\x83\xa9", + "\xe3\x83\xaa", + "\xe3\x83\xab", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe3\x83\xac", + "\xe3\x83\xad", + "\xe3\x83\xaf", + "\xe3\x83\xb3", + "\xe3\x82\x9b", + "\xe3\x82\x9c", + "\xef\xbf\xbd", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x24", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\xe0", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x0000007c => "\x4f", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a3 => "\x4a", + 0x000000a5 => "\x5b", + 0x000000a6 => "\x6a", + 0x000000ac => "\x5f", + 0x0000203e => "\xa1", + 0x00003001 => "\x44", + 0x00003002 => "\x41", + 0x0000300c => "\x42", + 0x0000300d => "\x43", + 0x0000309b => "\xbe", + 0x0000309c => "\xbf", + 0x000030a1 => "\x47", + 0x000030a2 => "\x81", + 0x000030a3 => "\x48", + 0x000030a4 => "\x82", + 0x000030a5 => "\x49", + 0x000030a6 => "\x83", + 0x000030a7 => "\x51", + 0x000030a8 => "\x84", + 0x000030a9 => "\x52", + 0x000030aa => "\x85", + 0x000030ab => "\x86", + 0x000030ad => "\x87", + 0x000030af => "\x88", + 0x000030b1 => "\x89", + 0x000030b3 => "\x8a", + 0x000030b5 => "\x8c", + 0x000030b7 => "\x8d", + 0x000030b9 => "\x8e", + 0x000030bb => "\x8f", + 0x000030bd => "\x90", + 0x000030bf => "\x91", + 0x000030c1 => "\x92", + 0x000030c3 => "\x56", + 0x000030c4 => "\x93", + 0x000030c6 => "\x94", + 0x000030c8 => "\x95", + 0x000030ca => "\x96", + 0x000030cb => "\x97", + 0x000030cc => "\x98", + 0x000030cd => "\x99", + 0x000030ce => "\x9a", + 0x000030cf => "\x9d", + 0x000030d2 => "\x9e", + 0x000030d5 => "\x9f", + 0x000030d8 => "\xa2", + 0x000030db => "\xa3", + 0x000030de => "\xa4", + 0x000030df => "\xa5", + 0x000030e0 => "\xa6", + 0x000030e1 => "\xa7", + 0x000030e2 => "\xa8", + 0x000030e3 => "\x53", + 0x000030e4 => "\xa9", + 0x000030e5 => "\x54", + 0x000030e6 => "\xaa", + 0x000030e7 => "\x55", + 0x000030e8 => "\xac", + 0x000030e9 => "\xad", + 0x000030ea => "\xae", + 0x000030eb => "\xaf", + 0x000030ec => "\xba", + 0x000030ed => "\xbb", + 0x000030ef => "\xbc", + 0x000030f2 => "\x46", + 0x000030f3 => "\xbd", + 0x000030fb => "\x45", + 0x000030fc => "\x58", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM290 - Conversion routines for IBM290 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM290. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + alias CP290 + alias EBCDIC-JP-KANA + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 00003002 | IDEOGRAPHIC FULL STOP + 42 | 0000300C | LEFT CORNER BRACKET + 43 | 0000300D | RIGHT CORNER BRACKET + 44 | 00003001 | IDEOGRAPHIC COMMA + 45 | 000030FB | KATAKANA MIDDLE DOT + 46 | 000030F2 | KATAKANA LETTER WO + 47 | 000030A1 | KATAKANA LETTER SMALL A + 48 | 000030A3 | KATAKANA LETTER SMALL I + 49 | 000030A5 | KATAKANA LETTER SMALL U + 4A | 000000A3 | POUND SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 51 | 000030A7 | KATAKANA LETTER SMALL E + 52 | 000030A9 | KATAKANA LETTER SMALL O + 53 | 000030E3 | KATAKANA LETTER SMALL YA + 54 | 000030E5 | KATAKANA LETTER SMALL YU + 55 | 000030E7 | KATAKANA LETTER SMALL YO + 56 | 000030C3 | KATAKANA LETTER SMALL TU + 58 | 000030FC | KATAKANA-HIRAGANA PROLONGED SOUND MARK + 5A | 00000021 | EXCLAMATION MARK + 5B | 000000A5 | YEN SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 000030A2 | KATAKANA LETTER A + 82 | 000030A4 | KATAKANA LETTER I + 83 | 000030A6 | KATAKANA LETTER U + 84 | 000030A8 | KATAKANA LETTER E + 85 | 000030AA | KATAKANA LETTER O + 86 | 000030AB | KATAKANA LETTER KA + 87 | 000030AD | KATAKANA LETTER KI + 88 | 000030AF | KATAKANA LETTER KU + 89 | 000030B1 | KATAKANA LETTER KE + 8A | 000030B3 | KATAKANA LETTER KO + 8C | 000030B5 | KATAKANA LETTER SA + 8D | 000030B7 | KATAKANA LETTER SI + 8E | 000030B9 | KATAKANA LETTER SU + 8F | 000030BB | KATAKANA LETTER SE + 90 | 000030BD | KATAKANA LETTER SO + 91 | 000030BF | KATAKANA LETTER TA + 92 | 000030C1 | KATAKANA LETTER TI + 93 | 000030C4 | KATAKANA LETTER TU + 94 | 000030C6 | KATAKANA LETTER TE + 95 | 000030C8 | KATAKANA LETTER TO + 96 | 000030CA | KATAKANA LETTER NA + 97 | 000030CB | KATAKANA LETTER NI + 98 | 000030CC | KATAKANA LETTER NU + 99 | 000030CD | KATAKANA LETTER NE + 9A | 000030CE | KATAKANA LETTER NO + 9D | 000030CF | KATAKANA LETTER HA + 9E | 000030D2 | KATAKANA LETTER HI + 9F | 000030D5 | KATAKANA LETTER HU + A1 | 0000203E | OVERLINE + A2 | 000030D8 | KATAKANA LETTER HE + A3 | 000030DB | KATAKANA LETTER HO + A4 | 000030DE | KATAKANA LETTER MA + A5 | 000030DF | KATAKANA LETTER MI + A6 | 000030E0 | KATAKANA LETTER MU + A7 | 000030E1 | KATAKANA LETTER ME + A8 | 000030E2 | KATAKANA LETTER MO + A9 | 000030E4 | KATAKANA LETTER YA + AA | 000030E6 | KATAKANA LETTER YU + AC | 000030E8 | KATAKANA LETTER YO + AD | 000030E9 | KATAKANA LETTER RA + AE | 000030EA | KATAKANA LETTER RI + AF | 000030EB | KATAKANA LETTER RU + BA | 000030EC | KATAKANA LETTER RE + BB | 000030ED | KATAKANA LETTER RO + BC | 000030EF | KATAKANA LETTER WA + BD | 000030F3 | KATAKANA LETTER N + BE | 0000309B | KATAKANA-HIRAGANA VOICED SOUND MARK + BF | 0000309C | KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + E0 | 00000024 | DOLLAR SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM297.pm b/lib/Locale/RecodeData/IBM297.pm new file mode 100644 index 0000000..441d9a3 --- /dev/null +++ b/lib/Locale/RecodeData/IBM297.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM297. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM297; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x0040, + 0x00e1, + 0x00e3, + 0x00e5, + 0x005c, + 0x00f1, + 0x00b0, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x007b, + 0x00ea, + 0x00eb, + 0x007d, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x00a7, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x00d1, + 0x00f9, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00b5, + 0x003a, + 0x00a3, + 0x00e0, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x005b, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x00a4, + 0x0060, + 0x00a8, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x00a2, + 0x0023, + 0x00a5, + 0x00b7, + 0x00a9, + 0x005d, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00ac, + 0x007c, + 0x203e, + 0x007e, + 0x00b4, + 0x00d7, + 0x00e9, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x00e8, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x00fc, + 0x00a6, + 0x00fa, + 0x00ff, + 0x00e7, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x00d6, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\x40", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\x5c", + "\xc3\xb1", + "\xc2\xb0", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\x7b", + "\xc3\xaa", + "\xc3\xab", + "\x7d", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\xc2\xa7", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\xc3\x91", + "\xc3\xb9", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc2\xb5", + "\x3a", + "\xc2\xa3", + "\xc3\xa0", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\x5b", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\xc2\xa4", + "\x60", + "\xc2\xa8", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xa2", + "\x23", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\x5d", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xac", + "\x7c", + "\xe2\x80\xbe", + "\x7e", + "\xc2\xb4", + "\xc3\x97", + "\xc3\xa9", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\xc3\xa8", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc2\xa6", + "\xc3\xba", + "\xc3\xbf", + "\xc3\xa7", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\xc3\x96", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\xb1", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x44", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x90", + 0x0000005c => "\x48", + 0x0000005d => "\xb5", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\xa0", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\x51", + 0x0000007c => "\xbb", + 0x0000007d => "\x54", + 0x0000007e => "\xbd", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\x7b", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\xdd", + 0x000000a7 => "\x5a", + 0x000000a8 => "\xa1", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xba", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x4a", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\x79", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xec", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\x7c", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\xe0", + 0x000000e8 => "\xd0", + 0x000000e9 => "\xc0", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xcc", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\x6a", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", + 0x0000203e => "\xbc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM297 - Conversion routines for IBM297 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM297. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP297 + alias EBCDIC-CP-FR + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 00000040 | COMMERCIAL AT + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 0000005C | REVERSE SOLIDUS + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 000000B0 | DEGREE SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 0000007B | LEFT CURLY BRACKET + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 0000007D | RIGHT CURLY BRACKET + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 000000A7 | SECTION SIGN + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 000000B5 | MICRO SIGN + 7A | 0000003A | COLON + 7B | 000000A3 | POUND SIGN + 7C | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 0000005B | LEFT SQUARE BRACKET + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 00000060 | GRAVE ACCENT + A1 | 000000A8 | DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 00000023 | NUMBER SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 0000005D | RIGHT SQUARE BRACKET + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000AC | NOT SIGN + BB | 0000007C | VERTICAL LINE + BC | 0000203E | OVERLINE + BD | 0000007E | TILDE + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 000000A6 | BROKEN BAR + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM420.pm b/lib/Locale/RecodeData/IBM420.pm new file mode 100644 index 0000000..5e5d422 --- /dev/null +++ b/lib/Locale/RecodeData/IBM420.pm @@ -0,0 +1,1122 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM420. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM420; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x0651, + 0xfe7d, + 0x0640, + 0xfffd, + 0x0621, + 0x0622, + 0xfe82, + 0x0623, + 0x00a2, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0xfe84, + 0x0624, + 0xfffd, + 0xfffd, + 0x0626, + 0x0627, + 0xfe8e, + 0x0628, + 0xfe91, + 0x0021, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0x0629, + 0x062a, + 0xfe97, + 0x062b, + 0xfe9b, + 0x062c, + 0xfe9f, + 0x062d, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfea3, + 0x062e, + 0xfea7, + 0x062f, + 0x0630, + 0x0631, + 0x0632, + 0x0633, + 0xfeb3, + 0x060c, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x0634, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0xfeb7, + 0x0635, + 0xfebb, + 0x0636, + 0xfebf, + 0x0637, + 0x0638, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x0639, + 0xfeca, + 0xfecb, + 0xfecc, + 0x063a, + 0xfece, + 0xfecf, + 0x00f7, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfed0, + 0x0641, + 0xfed3, + 0x0642, + 0xfed7, + 0x0643, + 0xfedb, + 0x0644, + 0xfef5, + 0xfef6, + 0xfef7, + 0xfef8, + 0xfffd, + 0xfffd, + 0xfefb, + 0xfefc, + 0xfedf, + 0x0645, + 0xfee3, + 0x0646, + 0xfee7, + 0x0647, + 0x061b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0xfeeb, + 0xfffd, + 0xfeec, + 0xfffd, + 0x0648, + 0x061f, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x0649, + 0xfef0, + 0x064a, + 0xfef2, + 0xfef3, + 0x0660, + 0x00d7, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x0661, + 0x0662, + 0xfffd, + 0x0663, + 0x0664, + 0x0665, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0x0666, + 0x0667, + 0x0668, + 0x0669, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xd9\x91", + "\xef\xb9\xbd", + "\xd9\x80", + "\xef\xbf\xbd", + "\xd8\xa1", + "\xd8\xa2", + "\xef\xba\x82", + "\xd8\xa3", + "\xc2\xa2", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xef\xba\x84", + "\xd8\xa4", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\xa6", + "\xd8\xa7", + "\xef\xba\x8e", + "\xd8\xa8", + "\xef\xba\x91", + "\x21", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xd8\xa9", + "\xd8\xaa", + "\xef\xba\x97", + "\xd8\xab", + "\xef\xba\x9b", + "\xd8\xac", + "\xef\xba\x9f", + "\xd8\xad", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xba\xa3", + "\xd8\xae", + "\xef\xba\xa7", + "\xd8\xaf", + "\xd8\xb0", + "\xd8\xb1", + "\xd8\xb2", + "\xd8\xb3", + "\xef\xba\xb3", + "\xd8\x8c", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xd8\xb4", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xef\xba\xb7", + "\xd8\xb5", + "\xef\xba\xbb", + "\xd8\xb6", + "\xef\xba\xbf", + "\xd8\xb7", + "\xd8\xb8", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xd8\xb9", + "\xef\xbb\x8a", + "\xef\xbb\x8b", + "\xef\xbb\x8c", + "\xd8\xba", + "\xef\xbb\x8e", + "\xef\xbb\x8f", + "\xc3\xb7", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbb\x90", + "\xd9\x81", + "\xef\xbb\x93", + "\xd9\x82", + "\xef\xbb\x97", + "\xd9\x83", + "\xef\xbb\x9b", + "\xd9\x84", + "\xef\xbb\xb5", + "\xef\xbb\xb6", + "\xef\xbb\xb7", + "\xef\xbb\xb8", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbb\xbb", + "\xef\xbb\xbc", + "\xef\xbb\x9f", + "\xd9\x85", + "\xef\xbb\xa3", + "\xd9\x86", + "\xef\xbb\xa7", + "\xd9\x87", + "\xd8\x9b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xef\xbb\xab", + "\xef\xbf\xbd", + "\xef\xbb\xac", + "\xef\xbf\xbd", + "\xd9\x88", + "\xd8\x9f", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xd9\x89", + "\xef\xbb\xb0", + "\xd9\x8a", + "\xef\xbb\xb2", + "\xef\xbb\xb3", + "\xd9\xa0", + "\xc3\x97", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xd9\xa1", + "\xd9\xa2", + "\xef\xbf\xbd", + "\xd9\xa3", + "\xd9\xa4", + "\xd9\xa5", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xd9\xa6", + "\xd9\xa7", + "\xd9\xa8", + "\xd9\xa9", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007c => "\x4f", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a2 => "\x4a", + 0x000000a6 => "\x6a", + 0x000000ac => "\x5f", + 0x000000ad => "\xca", + 0x000000d7 => "\xe0", + 0x000000f7 => "\xa1", + 0x0000060c => "\x79", + 0x0000061b => "\xc0", + 0x0000061f => "\xd0", + 0x00000621 => "\x46", + 0x00000622 => "\x47", + 0x00000623 => "\x49", + 0x00000624 => "\x52", + 0x00000626 => "\x55", + 0x00000627 => "\x56", + 0x00000628 => "\x58", + 0x00000629 => "\x62", + 0x0000062a => "\x63", + 0x0000062b => "\x65", + 0x0000062c => "\x67", + 0x0000062d => "\x69", + 0x0000062e => "\x71", + 0x0000062f => "\x73", + 0x00000630 => "\x74", + 0x00000631 => "\x75", + 0x00000632 => "\x76", + 0x00000633 => "\x77", + 0x00000634 => "\x80", + 0x00000635 => "\x8b", + 0x00000636 => "\x8d", + 0x00000637 => "\x8f", + 0x00000638 => "\x90", + 0x00000639 => "\x9a", + 0x0000063a => "\x9e", + 0x00000640 => "\x44", + 0x00000641 => "\xab", + 0x00000642 => "\xad", + 0x00000643 => "\xaf", + 0x00000644 => "\xb1", + 0x00000645 => "\xbb", + 0x00000646 => "\xbd", + 0x00000647 => "\xbf", + 0x00000648 => "\xcf", + 0x00000649 => "\xda", + 0x0000064a => "\xdc", + 0x00000651 => "\x42", + 0x00000660 => "\xdf", + 0x00000661 => "\xea", + 0x00000662 => "\xeb", + 0x00000663 => "\xed", + 0x00000664 => "\xee", + 0x00000665 => "\xef", + 0x00000666 => "\xfb", + 0x00000667 => "\xfc", + 0x00000668 => "\xfd", + 0x00000669 => "\xfe", + 0x0000fe7d => "\x43", + 0x0000fe82 => "\x48", + 0x0000fe84 => "\x51", + 0x0000fe8e => "\x57", + 0x0000fe91 => "\x59", + 0x0000fe97 => "\x64", + 0x0000fe9b => "\x66", + 0x0000fe9f => "\x68", + 0x0000fea3 => "\x70", + 0x0000fea7 => "\x72", + 0x0000feb3 => "\x78", + 0x0000feb7 => "\x8a", + 0x0000febb => "\x8c", + 0x0000febf => "\x8e", + 0x0000feca => "\x9b", + 0x0000fecb => "\x9c", + 0x0000fecc => "\x9d", + 0x0000fece => "\x9f", + 0x0000fecf => "\xa0", + 0x0000fed0 => "\xaa", + 0x0000fed3 => "\xac", + 0x0000fed7 => "\xae", + 0x0000fedb => "\xb0", + 0x0000fedf => "\xba", + 0x0000fee3 => "\xbc", + 0x0000fee7 => "\xbe", + 0x0000feeb => "\xcb", + 0x0000feec => "\xcd", + 0x0000fef0 => "\xdb", + 0x0000fef2 => "\xdd", + 0x0000fef3 => "\xde", + 0x0000fef5 => "\xb2", + 0x0000fef6 => "\xb3", + 0x0000fef7 => "\xb4", + 0x0000fef8 => "\xb5", + 0x0000fefb => "\xb8", + 0x0000fefc => "\xb9", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\xd0"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM420 - Conversion routines for IBM420 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM420. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + IBM NLS RM p 11-11 + alias CP420 + alias EBCDIC-CP-AR1 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 00000651 | ARABIC SHADDA + 43 | 0000FE7D | ARABIC SHADDA MEDIAL FORM + 44 | 00000640 | ARABIC TATWEEL + 46 | 00000621 | ARABIC LETTER HAMZA + 47 | 00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE + 48 | 0000FE82 | ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM + 49 | 00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE + 4A | 000000A2 | CENT SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 51 | 0000FE84 | ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM + 52 | 00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE + 55 | 00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE + 56 | 00000627 | ARABIC LETTER ALEF + 57 | 0000FE8E | ARABIC LETTER ALEF FINAL FORM + 58 | 00000628 | ARABIC LETTER BEH + 59 | 0000FE91 | ARABIC LETTER BEH INITIAL FORM + 5A | 00000021 | EXCLAMATION MARK + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 00000629 | ARABIC LETTER TEH MARBUTA + 63 | 0000062A | ARABIC LETTER TEH + 64 | 0000FE97 | ARABIC LETTER TEH INITIAL FORM + 65 | 0000062B | ARABIC LETTER THEH + 66 | 0000FE9B | ARABIC LETTER THEH INITIAL FORM + 67 | 0000062C | ARABIC LETTER JEEM + 68 | 0000FE9F | ARABIC LETTER JEEM INITIAL FORM + 69 | 0000062D | ARABIC LETTER HAH + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 0000FEA3 | ARABIC LETTER HAH INITIAL FORM + 71 | 0000062E | ARABIC LETTER KHAH + 72 | 0000FEA7 | ARABIC LETTER KHAH INITIAL FORM + 73 | 0000062F | ARABIC LETTER DAL + 74 | 00000630 | ARABIC LETTER THAL + 75 | 00000631 | ARABIC LETTER REH + 76 | 00000632 | ARABIC LETTER ZAIN + 77 | 00000633 | ARABIC LETTER SEEN + 78 | 0000FEB3 | ARABIC LETTER SEEN INITIAL FORM + 79 | 0000060C | ARABIC COMMA + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 00000634 | ARABIC LETTER SHEEN + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 0000FEB7 | ARABIC LETTER SHEEN INITIAL FORM + 8B | 00000635 | ARABIC LETTER SAD + 8C | 0000FEBB | ARABIC LETTER SAD INITIAL FORM + 8D | 00000636 | ARABIC LETTER DAD + 8E | 0000FEBF | ARABIC LETTER DAD INITIAL FORM + 8F | 00000637 | ARABIC LETTER TAH + 90 | 00000638 | ARABIC LETTER ZAH + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 00000639 | ARABIC LETTER AIN + 9B | 0000FECA | ARABIC LETTER AIN FINAL FORM + 9C | 0000FECB | ARABIC LETTER AIN INITIAL FORM + 9D | 0000FECC | ARABIC LETTER AIN MEDIAL FORM + 9E | 0000063A | ARABIC LETTER GHAIN + 9F | 0000FECE | ARABIC LETTER GHAIN FINAL FORM + A0 | 0000FECF | ARABIC LETTER GHAIN INITIAL FORM + A1 | 000000F7 | DIVISION SIGN + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 0000FED0 | ARABIC LETTER GHAIN MEDIAL FORM + AB | 00000641 | ARABIC LETTER FEH + AC | 0000FED3 | ARABIC LETTER FEH INITIAL FORM + AD | 00000642 | ARABIC LETTER QAF + AE | 0000FED7 | ARABIC LETTER QAF INITIAL FORM + AF | 00000643 | ARABIC LETTER KAF + B0 | 0000FEDB | ARABIC LETTER KAF INITIAL FORM + B1 | 00000644 | ARABIC LETTER LAM + B2 | 0000FEF5 | ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + B3 | 0000FEF6 | ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + B4 | 0000FEF7 | ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + B5 | 0000FEF8 | ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + B8 | 0000FEFB | ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + B9 | 0000FEFC | ARABIC LIGATURE LAM WITH ALEF FINAL FORM + BA | 0000FEDF | ARABIC LETTER LAM INITIAL FORM + BB | 00000645 | ARABIC LETTER MEEM + BC | 0000FEE3 | ARABIC LETTER MEEM INITIAL FORM + BD | 00000646 | ARABIC LETTER NOON + BE | 0000FEE7 | ARABIC LETTER NOON INITIAL FORM + BF | 00000647 | ARABIC LETTER HEH + C0 | 0000061B | ARABIC SEMICOLON + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 0000FEEB | ARABIC LETTER HEH INITIAL FORM + CD | 0000FEEC | ARABIC LETTER HEH MEDIAL FORM + CF | 00000648 | ARABIC LETTER WAW + D0 | 0000061F | ARABIC QUESTION MARK + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 00000649 | ARABIC LETTER ALEF MAKSURA + DB | 0000FEF0 | ARABIC LETTER ALEF MAKSURA FINAL FORM + DC | 0000064A | ARABIC LETTER YEH + DD | 0000FEF2 | ARABIC LETTER YEH FINAL FORM + DE | 0000FEF3 | ARABIC LETTER YEH INITIAL FORM + DF | 00000660 | ARABIC-INDIC DIGIT ZERO + E0 | 000000D7 | MULTIPLICATION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 00000661 | ARABIC-INDIC DIGIT ONE + EB | 00000662 | ARABIC-INDIC DIGIT TWO + ED | 00000663 | ARABIC-INDIC DIGIT THREE + EE | 00000664 | ARABIC-INDIC DIGIT FOUR + EF | 00000665 | ARABIC-INDIC DIGIT FIVE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FB | 00000666 | ARABIC-INDIC DIGIT SIX + FC | 00000667 | ARABIC-INDIC DIGIT SEVEN + FD | 00000668 | ARABIC-INDIC DIGIT EIGHT + FE | 00000669 | ARABIC-INDIC DIGIT NINE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM423.pm b/lib/Locale/RecodeData/IBM423.pm new file mode 100644 index 0000000..a276058 --- /dev/null +++ b/lib/Locale/RecodeData/IBM423.pm @@ -0,0 +1,1121 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM423. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM423; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x0391, + 0x0392, + 0x0393, + 0x0394, + 0x0395, + 0x0396, + 0x0397, + 0x0398, + 0x0399, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x039e, + 0x039f, + 0x03a0, + 0x03a1, + 0x03a3, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x03a4, + 0x03a5, + 0x03a6, + 0x03a7, + 0x03a8, + 0x03a9, + 0xfffd, + 0xfffd, + 0xfffd, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0x0386, + 0x0388, + 0x0389, + 0xfffd, + 0x038a, + 0x038c, + 0x038e, + 0x038f, + 0x0060, + 0x003a, + 0x00a3, + 0x00a7, + 0x0027, + 0x003d, + 0x0022, + 0x00c4, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x03b1, + 0x03b2, + 0x03b3, + 0x03b4, + 0x03b5, + 0x03b6, + 0x00d6, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x03b7, + 0x03b8, + 0x03b9, + 0x03ba, + 0x03bb, + 0x03bc, + 0x00dc, + 0x00a8, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x03bd, + 0x03be, + 0x03bf, + 0x03c0, + 0x03c1, + 0x03c2, + 0xfffd, + 0x03ac, + 0x03ad, + 0x03ae, + 0x03ca, + 0x03af, + 0x03cc, + 0x03cd, + 0x03cb, + 0x03ce, + 0x03c3, + 0x03c4, + 0x03c5, + 0x03c6, + 0x03c7, + 0x03c8, + 0x00b8, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0xfffd, + 0x03c9, + 0x00c2, + 0x00e0, + 0x00e4, + 0x00ea, + 0x00b4, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b1, + 0x00e9, + 0x00e8, + 0x00eb, + 0x00ee, + 0x00ef, + 0x00b0, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00bd, + 0x00f6, + 0x00f4, + 0x00fb, + 0x00f9, + 0x00fc, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00ff, + 0x00e7, + 0x00c7, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xce\x91", + "\xce\x92", + "\xce\x93", + "\xce\x94", + "\xce\x95", + "\xce\x96", + "\xce\x97", + "\xce\x98", + "\xce\x99", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xce\x9e", + "\xce\x9f", + "\xce\xa0", + "\xce\xa1", + "\xce\xa3", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xce\xa4", + "\xce\xa5", + "\xce\xa6", + "\xce\xa7", + "\xce\xa8", + "\xce\xa9", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xce\x86", + "\xce\x88", + "\xce\x89", + "\xef\xbf\xbd", + "\xce\x8a", + "\xce\x8c", + "\xce\x8e", + "\xce\x8f", + "\x60", + "\x3a", + "\xc2\xa3", + "\xc2\xa7", + "\x27", + "\x3d", + "\x22", + "\xc3\x84", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xce\xb4", + "\xce\xb5", + "\xce\xb6", + "\xc3\x96", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xc3\x9c", + "\xc2\xa8", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xce\xbd", + "\xce\xbe", + "\xce\xbf", + "\xcf\x80", + "\xcf\x81", + "\xcf\x82", + "\xef\xbf\xbd", + "\xce\xac", + "\xce\xad", + "\xce\xae", + "\xcf\x8a", + "\xce\xaf", + "\xcf\x8c", + "\xcf\x8d", + "\xcf\x8b", + "\xcf\x8e", + "\xcf\x83", + "\xcf\x84", + "\xcf\x85", + "\xcf\x86", + "\xcf\x87", + "\xcf\x88", + "\xc2\xb8", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xef\xbf\xbd", + "\xcf\x89", + "\xc3\x82", + "\xc3\xa0", + "\xc3\xa4", + "\xc3\xaa", + "\xc2\xb4", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb1", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xab", + "\xc3\xae", + "\xc3\xaf", + "\xc2\xb0", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xbd", + "\xc3\xb6", + "\xc3\xb4", + "\xc3\xbb", + "\xc3\xb9", + "\xc3\xbc", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc3\xbf", + "\xc3\xa7", + "\xc3\x87", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a3 => "\x7b", + 0x000000a7 => "\x7c", + 0x000000a8 => "\xa1", + 0x000000b0 => "\xe0", + 0x000000b1 => "\xda", + 0x000000b4 => "\xd0", + 0x000000b8 => "\xc0", + 0x000000bd => "\xea", + 0x000000c2 => "\xcc", + 0x000000c4 => "\x80", + 0x000000c7 => "\xfc", + 0x000000d6 => "\x90", + 0x000000dc => "\xa0", + 0x000000e0 => "\xcd", + 0x000000e4 => "\xce", + 0x000000e7 => "\xfb", + 0x000000e8 => "\xdc", + 0x000000e9 => "\xdb", + 0x000000ea => "\xcf", + 0x000000eb => "\xdd", + 0x000000ee => "\xde", + 0x000000ef => "\xdf", + 0x000000f4 => "\xec", + 0x000000f6 => "\xeb", + 0x000000f9 => "\xee", + 0x000000fb => "\xed", + 0x000000fc => "\xef", + 0x000000ff => "\xfa", + 0x00000386 => "\x71", + 0x00000388 => "\x72", + 0x00000389 => "\x73", + 0x0000038a => "\x75", + 0x0000038c => "\x76", + 0x0000038e => "\x77", + 0x0000038f => "\x78", + 0x00000391 => "\x41", + 0x00000392 => "\x42", + 0x00000393 => "\x43", + 0x00000394 => "\x44", + 0x00000395 => "\x45", + 0x00000396 => "\x46", + 0x00000397 => "\x47", + 0x00000398 => "\x48", + 0x00000399 => "\x49", + 0x0000039a => "\x51", + 0x0000039b => "\x52", + 0x0000039c => "\x53", + 0x0000039d => "\x54", + 0x0000039e => "\x55", + 0x0000039f => "\x56", + 0x000003a0 => "\x57", + 0x000003a1 => "\x58", + 0x000003a3 => "\x59", + 0x000003a4 => "\x62", + 0x000003a5 => "\x63", + 0x000003a6 => "\x64", + 0x000003a7 => "\x65", + 0x000003a8 => "\x66", + 0x000003a9 => "\x67", + 0x000003ac => "\xb1", + 0x000003ad => "\xb2", + 0x000003ae => "\xb3", + 0x000003af => "\xb5", + 0x000003b1 => "\x8a", + 0x000003b2 => "\x8b", + 0x000003b3 => "\x8c", + 0x000003b4 => "\x8d", + 0x000003b5 => "\x8e", + 0x000003b6 => "\x8f", + 0x000003b7 => "\x9a", + 0x000003b8 => "\x9b", + 0x000003b9 => "\x9c", + 0x000003ba => "\x9d", + 0x000003bb => "\x9e", + 0x000003bc => "\x9f", + 0x000003bd => "\xaa", + 0x000003be => "\xab", + 0x000003bf => "\xac", + 0x000003c0 => "\xad", + 0x000003c1 => "\xae", + 0x000003c2 => "\xaf", + 0x000003c3 => "\xba", + 0x000003c4 => "\xbb", + 0x000003c5 => "\xbc", + 0x000003c6 => "\xbd", + 0x000003c7 => "\xbe", + 0x000003c8 => "\xbf", + 0x000003c9 => "\xcb", + 0x000003ca => "\xb4", + 0x000003cb => "\xb8", + 0x000003cc => "\xb6", + 0x000003cd => "\xb7", + 0x000003ce => "\xb9", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM423 - Conversion routines for IBM423 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM423. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP423 + alias EBCDIC-CP-GR + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 00000391 | GREEK CAPITAL LETTER ALPHA + 42 | 00000392 | GREEK CAPITAL LETTER BETA + 43 | 00000393 | GREEK CAPITAL LETTER GAMMA + 44 | 00000394 | GREEK CAPITAL LETTER DELTA + 45 | 00000395 | GREEK CAPITAL LETTER EPSILON + 46 | 00000396 | GREEK CAPITAL LETTER ZETA + 47 | 00000397 | GREEK CAPITAL LETTER ETA + 48 | 00000398 | GREEK CAPITAL LETTER THETA + 49 | 00000399 | GREEK CAPITAL LETTER IOTA + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 0000039A | GREEK CAPITAL LETTER KAPPA + 52 | 0000039B | GREEK CAPITAL LETTER LAMDA + 53 | 0000039C | GREEK CAPITAL LETTER MU + 54 | 0000039D | GREEK CAPITAL LETTER NU + 55 | 0000039E | GREEK CAPITAL LETTER XI + 56 | 0000039F | GREEK CAPITAL LETTER OMICRON + 57 | 000003A0 | GREEK CAPITAL LETTER PI + 58 | 000003A1 | GREEK CAPITAL LETTER RHO + 59 | 000003A3 | GREEK CAPITAL LETTER SIGMA + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000003A4 | GREEK CAPITAL LETTER TAU + 63 | 000003A5 | GREEK CAPITAL LETTER UPSILON + 64 | 000003A6 | GREEK CAPITAL LETTER PHI + 65 | 000003A7 | GREEK CAPITAL LETTER CHI + 66 | 000003A8 | GREEK CAPITAL LETTER PSI + 67 | 000003A9 | GREEK CAPITAL LETTER OMEGA + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 71 | 00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS + 72 | 00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS + 73 | 00000389 | GREEK CAPITAL LETTER ETA WITH TONOS + 75 | 0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS + 76 | 0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS + 77 | 0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS + 78 | 0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 000000A3 | POUND SIGN + 7C | 000000A7 | SECTION SIGN + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000003B1 | GREEK SMALL LETTER ALPHA + 8B | 000003B2 | GREEK SMALL LETTER BETA + 8C | 000003B3 | GREEK SMALL LETTER GAMMA + 8D | 000003B4 | GREEK SMALL LETTER DELTA + 8E | 000003B5 | GREEK SMALL LETTER EPSILON + 8F | 000003B6 | GREEK SMALL LETTER ZETA + 90 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000003B7 | GREEK SMALL LETTER ETA + 9B | 000003B8 | GREEK SMALL LETTER THETA + 9C | 000003B9 | GREEK SMALL LETTER IOTA + 9D | 000003BA | GREEK SMALL LETTER KAPPA + 9E | 000003BB | GREEK SMALL LETTER LAMDA + 9F | 000003BC | GREEK SMALL LETTER MU + A0 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + A1 | 000000A8 | DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000003BD | GREEK SMALL LETTER NU + AB | 000003BE | GREEK SMALL LETTER XI + AC | 000003BF | GREEK SMALL LETTER OMICRON + AD | 000003C0 | GREEK SMALL LETTER PI + AE | 000003C1 | GREEK SMALL LETTER RHO + AF | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + B1 | 000003AC | GREEK SMALL LETTER ALPHA WITH TONOS + B2 | 000003AD | GREEK SMALL LETTER EPSILON WITH TONOS + B3 | 000003AE | GREEK SMALL LETTER ETA WITH TONOS + B4 | 000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA + B5 | 000003AF | GREEK SMALL LETTER IOTA WITH TONOS + B6 | 000003CC | GREEK SMALL LETTER OMICRON WITH TONOS + B7 | 000003CD | GREEK SMALL LETTER UPSILON WITH TONOS + B8 | 000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA + B9 | 000003CE | GREEK SMALL LETTER OMEGA WITH TONOS + BA | 000003C3 | GREEK SMALL LETTER SIGMA + BB | 000003C4 | GREEK SMALL LETTER TAU + BC | 000003C5 | GREEK SMALL LETTER UPSILON + BD | 000003C6 | GREEK SMALL LETTER PHI + BE | 000003C7 | GREEK SMALL LETTER CHI + BF | 000003C8 | GREEK SMALL LETTER PSI + C0 | 000000B8 | CEDILLA + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CB | 000003C9 | GREEK SMALL LETTER OMEGA + CC | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + CD | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + CE | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + CF | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + D0 | 000000B4 | ACUTE ACCENT + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B1 | PLUS-MINUS SIGN + DB | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + DC | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + DD | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + DE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + DF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + E0 | 000000B0 | DEGREE SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000BD | VULGAR FRACTION ONE HALF + EB | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + EC | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + ED | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + EE | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + EF | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + FB | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + FC | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM424.pm b/lib/Locale/RecodeData/IBM424.pm new file mode 100644 index 0000000..cf6841d --- /dev/null +++ b/lib/Locale/RecodeData/IBM424.pm @@ -0,0 +1,1063 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM424. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM424; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x05d0, + 0x05d1, + 0x05d2, + 0x05d3, + 0x05d4, + 0x05d5, + 0x05d6, + 0x05d7, + 0x05d8, + 0x00a2, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x007c, + 0x0026, + 0x05d9, + 0x05da, + 0x05db, + 0x05dc, + 0x05dd, + 0x05de, + 0x05df, + 0x05e0, + 0x05e1, + 0x0021, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x00ac, + 0x002d, + 0x002f, + 0x05e2, + 0x05e3, + 0x05e4, + 0x05e5, + 0x05e6, + 0x05e7, + 0x05e8, + 0x05e9, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0x05ea, + 0xfffd, + 0xfffd, + 0x00a0, + 0xfffd, + 0xfffd, + 0xfffd, + 0x21d4, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfffd, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00b8, + 0xfffd, + 0x00a4, + 0x00b5, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00ae, + 0x005e, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x005b, + 0x005d, + 0x203e, + 0x00a8, + 0x00b4, + 0x00d7, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005c, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xd7\x90", + "\xd7\x91", + "\xd7\x92", + "\xd7\x93", + "\xd7\x94", + "\xd7\x95", + "\xd7\x96", + "\xd7\x97", + "\xd7\x98", + "\xc2\xa2", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x7c", + "\x26", + "\xd7\x99", + "\xd7\x9a", + "\xd7\x9b", + "\xd7\x9c", + "\xd7\x9d", + "\xd7\x9e", + "\xd7\x9f", + "\xd7\xa0", + "\xd7\xa1", + "\x21", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\xc2\xac", + "\x2d", + "\x2f", + "\xd7\xa2", + "\xd7\xa3", + "\xd7\xa4", + "\xd7\xa5", + "\xd7\xa6", + "\xd7\xa7", + "\xd7\xa8", + "\xd7\xa9", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xd7\xaa", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa0", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x87\x94", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb8", + "\xef\xbf\xbd", + "\xc2\xa4", + "\xc2\xb5", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xae", + "\x5e", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\x5b", + "\x5d", + "\xe2\x80\xbe", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5c", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x5a", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\xba", + 0x0000005c => "\xe0", + 0x0000005d => "\xbb", + 0x0000005e => "\xb0", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x4f", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x74", + 0x000000a2 => "\x4a", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x6a", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000ab => "\x8a", + 0x000000ac => "\x5f", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000b0 => "\x90", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000d7 => "\xbf", + 0x000000f7 => "\xe1", + 0x000005d0 => "\x41", + 0x000005d1 => "\x42", + 0x000005d2 => "\x43", + 0x000005d3 => "\x44", + 0x000005d4 => "\x45", + 0x000005d5 => "\x46", + 0x000005d6 => "\x47", + 0x000005d7 => "\x48", + 0x000005d8 => "\x49", + 0x000005d9 => "\x51", + 0x000005da => "\x52", + 0x000005db => "\x53", + 0x000005dc => "\x54", + 0x000005dd => "\x55", + 0x000005de => "\x56", + 0x000005df => "\x57", + 0x000005e0 => "\x58", + 0x000005e1 => "\x59", + 0x000005e2 => "\x62", + 0x000005e3 => "\x63", + 0x000005e4 => "\x64", + 0x000005e5 => "\x65", + 0x000005e6 => "\x66", + 0x000005e7 => "\x67", + 0x000005e8 => "\x68", + 0x000005e9 => "\x69", + 0x000005ea => "\x71", + 0x0000203e => "\xbc", + 0x000021d4 => "\x78", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM424 - Conversion routines for IBM424 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM424. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP424 + alias EBCDIC-CP-HE + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000005D0 | HEBREW LETTER ALEF + 42 | 000005D1 | HEBREW LETTER BET + 43 | 000005D2 | HEBREW LETTER GIMEL + 44 | 000005D3 | HEBREW LETTER DALET + 45 | 000005D4 | HEBREW LETTER HE + 46 | 000005D5 | HEBREW LETTER VAV + 47 | 000005D6 | HEBREW LETTER ZAYIN + 48 | 000005D7 | HEBREW LETTER HET + 49 | 000005D8 | HEBREW LETTER TET + 4A | 000000A2 | CENT SIGN + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 0000007C | VERTICAL LINE + 50 | 00000026 | AMPERSAND + 51 | 000005D9 | HEBREW LETTER YOD + 52 | 000005DA | HEBREW LETTER FINAL KAF + 53 | 000005DB | HEBREW LETTER KAF + 54 | 000005DC | HEBREW LETTER LAMED + 55 | 000005DD | HEBREW LETTER FINAL MEM + 56 | 000005DE | HEBREW LETTER MEM + 57 | 000005DF | HEBREW LETTER FINAL NUN + 58 | 000005E0 | HEBREW LETTER NUN + 59 | 000005E1 | HEBREW LETTER SAMEKH + 5A | 00000021 | EXCLAMATION MARK + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000AC | NOT SIGN + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000005E2 | HEBREW LETTER AYIN + 63 | 000005E3 | HEBREW LETTER FINAL PE + 64 | 000005E4 | HEBREW LETTER PE + 65 | 000005E5 | HEBREW LETTER FINAL TSADI + 66 | 000005E6 | HEBREW LETTER TSADI + 67 | 000005E7 | HEBREW LETTER QOF + 68 | 000005E8 | HEBREW LETTER RESH + 69 | 000005E9 | HEBREW LETTER SHIN + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 71 | 000005EA | HEBREW LETTER TAV + 74 | 000000A0 | NO-BREAK SPACE + 78 | 000021D4 | LEFT RIGHT DOUBLE ARROW + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9D | 000000B8 | CEDILLA + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AF | 000000AE | REGISTERED SIGN + B0 | 0000005E | CIRCUMFLEX ACCENT + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 0000005B | LEFT SQUARE BRACKET + BB | 0000005D | RIGHT SQUARE BRACKET + BC | 0000203E | OVERLINE + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM437.pm b/lib/Locale/RecodeData/IBM437.pm new file mode 100644 index 0000000..bdf6580 --- /dev/null +++ b/lib/Locale/RecodeData/IBM437.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM437. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM437; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e5, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ef, + 0x00ee, + 0x00ec, + 0x00c4, + 0x00c5, + 0x00c9, + 0x00e6, + 0x00c6, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00fb, + 0x00f9, + 0x00ff, + 0x00d6, + 0x00dc, + 0x00a2, + 0x00a3, + 0x00a5, + 0x20a7, + 0x0192, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00f1, + 0x00d1, + 0x00aa, + 0x00ba, + 0x00bf, + 0x2310, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x2561, + 0x2562, + 0x2556, + 0x2555, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x255c, + 0x255b, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x255e, + 0x255f, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x2567, + 0x2568, + 0x2564, + 0x2565, + 0x2559, + 0x2558, + 0x2552, + 0x2553, + 0x256b, + 0x256a, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xaf", + "\xc3\xae", + "\xc3\xac", + "\xc3\x84", + "\xc3\x85", + "\xc3\x89", + "\xc3\xa6", + "\xc3\x86", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xbb", + "\xc3\xb9", + "\xc3\xbf", + "\xc3\x96", + "\xc3\x9c", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xe2\x82\xa7", + "\xc6\x92", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xb1", + "\xc3\x91", + "\xc2\xaa", + "\xc2\xba", + "\xc2\xbf", + "\xe2\x8c\x90", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xe2\x95\xa1", + "\xe2\x95\xa2", + "\xe2\x95\x96", + "\xe2\x95\x95", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xe2\x95\x9c", + "\xe2\x95\x9b", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa4", + "\xe2\x95\xa5", + "\xe2\x95\x99", + "\xe2\x95\x98", + "\xe2\x95\x92", + "\xe2\x95\x93", + "\xe2\x95\xab", + "\xe2\x95\xaa", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x80", + "\xce\xb1", + "\xc3\x9f", + "\xce\x93", + "\xcf\x80", + "\xce\xa3", + "\xcf\x83", + "\xc2\xb5", + "\xcf\x84", + "\xce\xa6", + "\xce\x98", + "\xce\xa9", + "\xce\xb4", + "\xe2\x88\x9e", + "\xcf\x86", + "\xce\xb5", + "\xe2\x88\xa9", + "\xe2\x89\xa1", + "\xc2\xb1", + "\xe2\x89\xa5", + "\xe2\x89\xa4", + "\xe2\x8c\xa0", + "\xe2\x8c\xa1", + "\xc3\xb7", + "\xe2\x89\x88", + "\xc2\xb0", + "\xe2\x88\x99", + "\xc2\xb7", + "\xe2\x88\x9a", + "\xe2\x81\xbf", + "\xc2\xb2", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a1 => "\xad", + 0x000000a2 => "\x9b", + 0x000000a3 => "\x9c", + 0x000000a5 => "\x9d", + 0x000000aa => "\xa6", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b5 => "\xe6", + 0x000000b7 => "\xfa", + 0x000000ba => "\xa7", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000bf => "\xa8", + 0x000000c4 => "\x8e", + 0x000000c5 => "\x8f", + 0x000000c6 => "\x92", + 0x000000c7 => "\x80", + 0x000000c9 => "\x90", + 0x000000d1 => "\xa5", + 0x000000d6 => "\x99", + 0x000000dc => "\x9a", + 0x000000df => "\xe1", + 0x000000e0 => "\x85", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e4 => "\x84", + 0x000000e5 => "\x86", + 0x000000e6 => "\x91", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ec => "\x8d", + 0x000000ed => "\xa1", + 0x000000ee => "\x8c", + 0x000000ef => "\x8b", + 0x000000f1 => "\xa4", + 0x000000f2 => "\x95", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f6 => "\x94", + 0x000000f7 => "\xf6", + 0x000000f9 => "\x97", + 0x000000fa => "\xa3", + 0x000000fb => "\x96", + 0x000000fc => "\x81", + 0x000000ff => "\x98", + 0x00000192 => "\x9f", + 0x00000393 => "\xe2", + 0x00000398 => "\xe9", + 0x000003a3 => "\xe4", + 0x000003a6 => "\xe8", + 0x000003a9 => "\xea", + 0x000003b1 => "\xe0", + 0x000003b4 => "\xeb", + 0x000003b5 => "\xee", + 0x000003c0 => "\xe3", + 0x000003c3 => "\xe5", + 0x000003c4 => "\xe7", + 0x000003c6 => "\xed", + 0x0000207f => "\xfc", + 0x000020a7 => "\x9e", + 0x00002219 => "\xf9", + 0x0000221a => "\xfb", + 0x0000221e => "\xec", + 0x00002229 => "\xef", + 0x00002248 => "\xf7", + 0x00002261 => "\xf0", + 0x00002264 => "\xf3", + 0x00002265 => "\xf2", + 0x00002310 => "\xa9", + 0x00002320 => "\xf4", + 0x00002321 => "\xf5", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002552 => "\xd5", + 0x00002553 => "\xd6", + 0x00002554 => "\xc9", + 0x00002555 => "\xb8", + 0x00002556 => "\xb7", + 0x00002557 => "\xbb", + 0x00002558 => "\xd4", + 0x00002559 => "\xd3", + 0x0000255a => "\xc8", + 0x0000255b => "\xbe", + 0x0000255c => "\xbd", + 0x0000255d => "\xbc", + 0x0000255e => "\xc6", + 0x0000255f => "\xc7", + 0x00002560 => "\xcc", + 0x00002561 => "\xb5", + 0x00002562 => "\xb6", + 0x00002563 => "\xb9", + 0x00002564 => "\xd1", + 0x00002565 => "\xd2", + 0x00002566 => "\xcb", + 0x00002567 => "\xcf", + 0x00002568 => "\xd0", + 0x00002569 => "\xca", + 0x0000256a => "\xd8", + 0x0000256b => "\xd7", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x0000258c => "\xdd", + 0x00002590 => "\xde", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM437 - Conversion routines for IBM437 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM437. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP437 + alias 437 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000E6 | LATIN SMALL LETTER AE + 92 | 000000C6 | LATIN CAPITAL LETTER AE + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 98 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000A2 | CENT SIGN + 9C | 000000A3 | POUND SIGN + 9D | 000000A5 | YEN SIGN + 9E | 000020A7 | PESETA SIGN + 9F | 00000192 | LATIN SMALL LETTER F WITH HOOK + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + A6 | 000000AA | FEMININE ORDINAL INDICATOR + A7 | 000000BA | MASCULINE ORDINAL INDICATOR + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 00002310 | REVERSED NOT SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 0000258C | LEFT HALF BLOCK + DE | 00002590 | RIGHT HALF BLOCK + DF | 00002580 | UPPER HALF BLOCK + E0 | 000003B1 | GREEK SMALL LETTER ALPHA + E1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + E2 | 00000393 | GREEK CAPITAL LETTER GAMMA + E3 | 000003C0 | GREEK SMALL LETTER PI + E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA + E5 | 000003C3 | GREEK SMALL LETTER SIGMA + E6 | 000000B5 | MICRO SIGN + E7 | 000003C4 | GREEK SMALL LETTER TAU + E8 | 000003A6 | GREEK CAPITAL LETTER PHI + E9 | 00000398 | GREEK CAPITAL LETTER THETA + EA | 000003A9 | GREEK CAPITAL LETTER OMEGA + EB | 000003B4 | GREEK SMALL LETTER DELTA + EC | 0000221E | INFINITY + ED | 000003C6 | GREEK SMALL LETTER PHI + EE | 000003B5 | GREEK SMALL LETTER EPSILON + EF | 00002229 | INTERSECTION + F0 | 00002261 | IDENTICAL TO + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002265 | GREATER-THAN OR EQUAL TO + F3 | 00002264 | LESS-THAN OR EQUAL TO + F4 | 00002320 | TOP HALF INTEGRAL + F5 | 00002321 | BOTTOM HALF INTEGRAL + F6 | 000000F7 | DIVISION SIGN + F7 | 00002248 | ALMOST EQUAL TO + F8 | 000000B0 | DEGREE SIGN + F9 | 00002219 | BULLET OPERATOR + FA | 000000B7 | MIDDLE DOT + FB | 0000221A | SQUARE ROOT + FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM500.pm b/lib/Locale/RecodeData/IBM500.pm new file mode 100644 index 0000000..3d759b0 --- /dev/null +++ b/lib/Locale/RecodeData/IBM500.pm @@ -0,0 +1,1144 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM500. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM500; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00f1, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x00d1, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x00f0, + 0x00fd, + 0x00fe, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x00e6, + 0x00b8, + 0x00c6, + 0x00a4, + 0x00b5, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x00d0, + 0x00dd, + 0x00de, + 0x00ae, + 0x00a2, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00ac, + 0x007c, + 0x00af, + 0x00a8, + 0x00b4, + 0x00d7, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00f3, + 0x00f5, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x00fc, + 0x00f9, + 0x00fa, + 0x00ff, + 0x005c, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x00d6, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xb1", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\xc3\x91", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\xc3\xb0", + "\xc3\xbd", + "\xc3\xbe", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\xc3\xa6", + "\xc2\xb8", + "\xc3\x86", + "\xc2\xa4", + "\xc2\xb5", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\xc3\x90", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xae", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xac", + "\x7c", + "\xc2\xaf", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\x5c", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\xc3\x96", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005c => "\xe0", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\xbb", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x6a", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xba", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000af => "\xbc", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x9e", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\xac", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\xec", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xae", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\x9c", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x8c", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xcc", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x000000fe => "\x8e", + 0x000000ff => "\xdf", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM500 - Conversion routines for IBM500 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM500. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP500 + alias 500 + alias 500V1 + alias EBCDIC-CP-BE + alias EBCDIC-CP-CH + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 000000E6 | LATIN SMALL LETTER AE + 9D | 000000B8 | CEDILLA + 9E | 000000C6 | LATIN CAPITAL LETTER AE + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000AC | NOT SIGN + BB | 0000007C | VERTICAL LINE + BC | 000000AF | MACRON + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM850.pm b/lib/Locale/RecodeData/IBM850.pm new file mode 100644 index 0000000..9567393 --- /dev/null +++ b/lib/Locale/RecodeData/IBM850.pm @@ -0,0 +1,1142 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM850. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM850; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e5, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ef, + 0x00ee, + 0x00ec, + 0x00c4, + 0x00c5, + 0x00c9, + 0x00e6, + 0x00c6, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00fb, + 0x00f9, + 0x00ff, + 0x00d6, + 0x00dc, + 0x00f8, + 0x00a3, + 0x00d8, + 0x00d7, + 0x0192, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00f1, + 0x00d1, + 0x00aa, + 0x00ba, + 0x00bf, + 0x00ae, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x00c1, + 0x00c2, + 0x00c0, + 0x00a9, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x00a2, + 0x00a5, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x00e3, + 0x00c3, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x00a4, + 0x00f0, + 0x00d0, + 0x00ca, + 0x00cb, + 0x00c8, + 0x0131, + 0x00cd, + 0x00ce, + 0x00cf, + 0x2518, + 0x250c, + 0x2588, + 0x2584, + 0x00a6, + 0x00cc, + 0x2580, + 0x00d3, + 0x00df, + 0x00d4, + 0x00d2, + 0x00f5, + 0x00d5, + 0x00b5, + 0x00fe, + 0x00de, + 0x00da, + 0x00db, + 0x00d9, + 0x00fd, + 0x00dd, + 0x00af, + 0x00b4, + 0x00ad, + 0x00b1, + 0x2017, + 0x00be, + 0x00b6, + 0x00a7, + 0x00f7, + 0x00b8, + 0x00b0, + 0x00a8, + 0x00b7, + 0x00b9, + 0x00b3, + 0x00b2, + 0x25a0, + 0x00a0, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xaf", + "\xc3\xae", + "\xc3\xac", + "\xc3\x84", + "\xc3\x85", + "\xc3\x89", + "\xc3\xa6", + "\xc3\x86", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xbb", + "\xc3\xb9", + "\xc3\xbf", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xb8", + "\xc2\xa3", + "\xc3\x98", + "\xc3\x97", + "\xc6\x92", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xb1", + "\xc3\x91", + "\xc2\xaa", + "\xc2\xba", + "\xc2\xbf", + "\xc2\xae", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xc3\x81", + "\xc3\x82", + "\xc3\x80", + "\xc2\xa9", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xc2\xa2", + "\xc2\xa5", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xc3\xa3", + "\xc3\x83", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xc2\xa4", + "\xc3\xb0", + "\xc3\x90", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc4\xb1", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xc2\xa6", + "\xc3\x8c", + "\xe2\x96\x80", + "\xc3\x93", + "\xc3\x9f", + "\xc3\x94", + "\xc3\x92", + "\xc3\xb5", + "\xc3\x95", + "\xc2\xb5", + "\xc3\xbe", + "\xc3\x9e", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x99", + "\xc3\xbd", + "\xc3\x9d", + "\xc2\xaf", + "\xc2\xb4", + "\xc2\xad", + "\xc2\xb1", + "\xe2\x80\x97", + "\xc2\xbe", + "\xc2\xb6", + "\xc2\xa7", + "\xc3\xb7", + "\xc2\xb8", + "\xc2\xb0", + "\xc2\xa8", + "\xc2\xb7", + "\xc2\xb9", + "\xc2\xb3", + "\xc2\xb2", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a1 => "\xad", + 0x000000a2 => "\xbd", + 0x000000a3 => "\x9c", + 0x000000a4 => "\xcf", + 0x000000a5 => "\xbe", + 0x000000a6 => "\xdd", + 0x000000a7 => "\xf5", + 0x000000a8 => "\xf9", + 0x000000a9 => "\xb8", + 0x000000aa => "\xa6", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000ad => "\xf0", + 0x000000ae => "\xa9", + 0x000000af => "\xee", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b3 => "\xfc", + 0x000000b4 => "\xef", + 0x000000b5 => "\xe6", + 0x000000b6 => "\xf4", + 0x000000b7 => "\xfa", + 0x000000b8 => "\xf7", + 0x000000b9 => "\xfb", + 0x000000ba => "\xa7", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000be => "\xf3", + 0x000000bf => "\xa8", + 0x000000c0 => "\xb7", + 0x000000c1 => "\xb5", + 0x000000c2 => "\xb6", + 0x000000c3 => "\xc7", + 0x000000c4 => "\x8e", + 0x000000c5 => "\x8f", + 0x000000c6 => "\x92", + 0x000000c7 => "\x80", + 0x000000c8 => "\xd4", + 0x000000c9 => "\x90", + 0x000000ca => "\xd2", + 0x000000cb => "\xd3", + 0x000000cc => "\xde", + 0x000000cd => "\xd6", + 0x000000ce => "\xd7", + 0x000000cf => "\xd8", + 0x000000d0 => "\xd1", + 0x000000d1 => "\xa5", + 0x000000d2 => "\xe3", + 0x000000d3 => "\xe0", + 0x000000d4 => "\xe2", + 0x000000d5 => "\xe5", + 0x000000d6 => "\x99", + 0x000000d7 => "\x9e", + 0x000000d8 => "\x9d", + 0x000000d9 => "\xeb", + 0x000000da => "\xe9", + 0x000000db => "\xea", + 0x000000dc => "\x9a", + 0x000000dd => "\xed", + 0x000000de => "\xe8", + 0x000000df => "\xe1", + 0x000000e0 => "\x85", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e3 => "\xc6", + 0x000000e4 => "\x84", + 0x000000e5 => "\x86", + 0x000000e6 => "\x91", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ec => "\x8d", + 0x000000ed => "\xa1", + 0x000000ee => "\x8c", + 0x000000ef => "\x8b", + 0x000000f0 => "\xd0", + 0x000000f1 => "\xa4", + 0x000000f2 => "\x95", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f5 => "\xe4", + 0x000000f6 => "\x94", + 0x000000f7 => "\xf6", + 0x000000f8 => "\x9b", + 0x000000f9 => "\x97", + 0x000000fa => "\xa3", + 0x000000fb => "\x96", + 0x000000fc => "\x81", + 0x000000fd => "\xec", + 0x000000fe => "\xe7", + 0x000000ff => "\x98", + 0x00000131 => "\xd5", + 0x00000192 => "\x9f", + 0x00002017 => "\xf2", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002554 => "\xc9", + 0x00002557 => "\xbb", + 0x0000255a => "\xc8", + 0x0000255d => "\xbc", + 0x00002560 => "\xcc", + 0x00002563 => "\xb9", + 0x00002566 => "\xcb", + 0x00002569 => "\xca", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM850 - Conversion routines for IBM850 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM850. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + source: UNICODE 1.0 + alias CP850 + alias 850 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000E6 | LATIN SMALL LETTER AE + 92 | 000000C6 | LATIN CAPITAL LETTER AE + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 98 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 9C | 000000A3 | POUND SIGN + 9D | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 9E | 000000D7 | MULTIPLICATION SIGN + 9F | 00000192 | LATIN SMALL LETTER F WITH HOOK + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + A6 | 000000AA | FEMININE ORDINAL INDICATOR + A7 | 000000BA | MASCULINE ORDINAL INDICATOR + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 000000AE | REGISTERED SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + B6 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + B7 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + B8 | 000000A9 | COPYRIGHT SIGN + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 000000A2 | CENT SIGN + BE | 000000A5 | YEN SIGN + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + C7 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 000000A4 | CURRENCY SIGN + D0 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + D1 | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + D2 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + D3 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + D4 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + D5 | 00000131 | LATIN SMALL LETTER DOTLESS I + D6 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + D7 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + D8 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 000000A6 | BROKEN BAR + DE | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + DF | 00002580 | UPPER HALF BLOCK + E0 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + E1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + E2 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + E3 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + E4 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + E5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + E6 | 000000B5 | MICRO SIGN + E7 | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + E8 | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + E9 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + EA | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + EB | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + EC | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + ED | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + EE | 000000AF | MACRON + EF | 000000B4 | ACUTE ACCENT + F0 | 000000AD | SOFT HYPHEN + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002017 | DOUBLE LOW LINE + F3 | 000000BE | VULGAR FRACTION THREE QUARTERS + F4 | 000000B6 | PILCROW SIGN + F5 | 000000A7 | SECTION SIGN + F6 | 000000F7 | DIVISION SIGN + F7 | 000000B8 | CEDILLA + F8 | 000000B0 | DEGREE SIGN + F9 | 000000A8 | DIAERESIS + FA | 000000B7 | MIDDLE DOT + FB | 000000B9 | SUPERSCRIPT ONE + FC | 000000B3 | SUPERSCRIPT THREE + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM851.pm b/lib/Locale/RecodeData/IBM851.pm new file mode 100644 index 0000000..8ccf91d --- /dev/null +++ b/lib/Locale/RecodeData/IBM851.pm @@ -0,0 +1,1139 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM851. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM851; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x00e0, + 0x0386, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ef, + 0x00ee, + 0x0388, + 0x00c4, + 0x0389, + 0x038a, + 0xfffd, + 0x038c, + 0x00f4, + 0x00f6, + 0x038e, + 0x00fb, + 0x00f9, + 0x038f, + 0x00d6, + 0x00dc, + 0x03ac, + 0x00a3, + 0x03ad, + 0x03ae, + 0x03af, + 0x03ca, + 0x0390, + 0x03cc, + 0x03cd, + 0x0391, + 0x0392, + 0x0393, + 0x0394, + 0x0395, + 0x0396, + 0x0397, + 0x00bd, + 0x0398, + 0x0399, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x039a, + 0x039b, + 0x039d, + 0x039c, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x039e, + 0x039f, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x03a0, + 0x03a1, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x03a3, + 0x03a4, + 0x03a5, + 0x03a6, + 0x03a7, + 0x03a8, + 0x03a9, + 0x03b1, + 0x03b2, + 0x03b3, + 0x2518, + 0x250c, + 0x2588, + 0x2584, + 0x03b4, + 0x03b5, + 0x2580, + 0x03b6, + 0x03b7, + 0x03b8, + 0x03b9, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03be, + 0x03bf, + 0x03c0, + 0x03c1, + 0x03c3, + 0x03c2, + 0x03c4, + 0x00b4, + 0x00ad, + 0x00b1, + 0x03c5, + 0x03c6, + 0x03c7, + 0x00a7, + 0x03c8, + 0x02db, + 0x00b0, + 0x00a8, + 0x03c9, + 0x03cb, + 0x03b0, + 0x03ce, + 0x25a0, + 0x00a0, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xce\x86", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xaf", + "\xc3\xae", + "\xce\x88", + "\xc3\x84", + "\xce\x89", + "\xce\x8a", + "\xef\xbf\xbd", + "\xce\x8c", + "\xc3\xb4", + "\xc3\xb6", + "\xce\x8e", + "\xc3\xbb", + "\xc3\xb9", + "\xce\x8f", + "\xc3\x96", + "\xc3\x9c", + "\xce\xac", + "\xc2\xa3", + "\xce\xad", + "\xce\xae", + "\xce\xaf", + "\xcf\x8a", + "\xce\x90", + "\xcf\x8c", + "\xcf\x8d", + "\xce\x91", + "\xce\x92", + "\xce\x93", + "\xce\x94", + "\xce\x95", + "\xce\x96", + "\xce\x97", + "\xc2\xbd", + "\xce\x98", + "\xce\x99", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xce\x9a", + "\xce\x9b", + "\xce\x9d", + "\xce\x9c", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xce\x9e", + "\xce\x9f", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xce\xa0", + "\xce\xa1", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xce\xa3", + "\xce\xa4", + "\xce\xa5", + "\xce\xa6", + "\xce\xa7", + "\xce\xa8", + "\xce\xa9", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xce\xb4", + "\xce\xb5", + "\xe2\x96\x80", + "\xce\xb6", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbe", + "\xce\xbf", + "\xcf\x80", + "\xcf\x81", + "\xcf\x83", + "\xcf\x82", + "\xcf\x84", + "\xc2\xb4", + "\xc2\xad", + "\xc2\xb1", + "\xcf\x85", + "\xcf\x86", + "\xcf\x87", + "\xc2\xa7", + "\xcf\x88", + "\xcb\x9b", + "\xc2\xb0", + "\xc2\xa8", + "\xcf\x89", + "\xcf\x8b", + "\xce\xb0", + "\xcf\x8e", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a3 => "\x9c", + 0x000000a7 => "\xf5", + 0x000000a8 => "\xf9", + 0x000000ab => "\xae", + 0x000000ad => "\xf0", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b4 => "\xef", + 0x000000bb => "\xaf", + 0x000000bd => "\xab", + 0x000000c4 => "\x8e", + 0x000000c7 => "\x80", + 0x000000d6 => "\x99", + 0x000000dc => "\x9a", + 0x000000e0 => "\x85", + 0x000000e2 => "\x83", + 0x000000e4 => "\x84", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ee => "\x8c", + 0x000000ef => "\x8b", + 0x000000f4 => "\x93", + 0x000000f6 => "\x94", + 0x000000f9 => "\x97", + 0x000000fb => "\x96", + 0x000000fc => "\x81", + 0x000002db => "\xf7", + 0x00000386 => "\x86", + 0x00000388 => "\x8d", + 0x00000389 => "\x8f", + 0x0000038a => "\x90", + 0x0000038c => "\x92", + 0x0000038e => "\x95", + 0x0000038f => "\x98", + 0x00000390 => "\xa1", + 0x00000391 => "\xa4", + 0x00000392 => "\xa5", + 0x00000393 => "\xa6", + 0x00000394 => "\xa7", + 0x00000395 => "\xa8", + 0x00000396 => "\xa9", + 0x00000397 => "\xaa", + 0x00000398 => "\xac", + 0x00000399 => "\xad", + 0x0000039a => "\xb5", + 0x0000039b => "\xb6", + 0x0000039c => "\xb8", + 0x0000039d => "\xb7", + 0x0000039e => "\xbd", + 0x0000039f => "\xbe", + 0x000003a0 => "\xc6", + 0x000003a1 => "\xc7", + 0x000003a3 => "\xcf", + 0x000003a4 => "\xd0", + 0x000003a5 => "\xd1", + 0x000003a6 => "\xd2", + 0x000003a7 => "\xd3", + 0x000003a8 => "\xd4", + 0x000003a9 => "\xd5", + 0x000003ac => "\x9b", + 0x000003ad => "\x9d", + 0x000003ae => "\x9e", + 0x000003af => "\x9f", + 0x000003b0 => "\xfc", + 0x000003b1 => "\xd6", + 0x000003b2 => "\xd7", + 0x000003b3 => "\xd8", + 0x000003b4 => "\xdd", + 0x000003b5 => "\xde", + 0x000003b6 => "\xe0", + 0x000003b7 => "\xe1", + 0x000003b8 => "\xe2", + 0x000003b9 => "\xe3", + 0x000003ba => "\xe4", + 0x000003bb => "\xe5", + 0x000003bc => "\xe6", + 0x000003bd => "\xe7", + 0x000003be => "\xe8", + 0x000003bf => "\xe9", + 0x000003c0 => "\xea", + 0x000003c1 => "\xeb", + 0x000003c2 => "\xed", + 0x000003c3 => "\xec", + 0x000003c4 => "\xee", + 0x000003c5 => "\xf2", + 0x000003c6 => "\xf3", + 0x000003c7 => "\xf4", + 0x000003c8 => "\xf6", + 0x000003c9 => "\xfa", + 0x000003ca => "\xa0", + 0x000003cb => "\xfb", + 0x000003cc => "\xa2", + 0x000003cd => "\xa3", + 0x000003ce => "\xfd", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002554 => "\xc9", + 0x00002557 => "\xbb", + 0x0000255a => "\xc8", + 0x0000255d => "\xbc", + 0x00002560 => "\xcc", + 0x00002563 => "\xb9", + 0x00002566 => "\xcb", + 0x00002569 => "\xca", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM851 - Conversion routines for IBM851 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM851. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP851 + alias 851 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 00000389 | GREEK CAPITAL LETTER ETA WITH TONOS + 90 | 0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS + 92 | 0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS + 96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 98 | 0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000003AC | GREEK SMALL LETTER ALPHA WITH TONOS + 9C | 000000A3 | POUND SIGN + 9D | 000003AD | GREEK SMALL LETTER EPSILON WITH TONOS + 9E | 000003AE | GREEK SMALL LETTER ETA WITH TONOS + 9F | 000003AF | GREEK SMALL LETTER IOTA WITH TONOS + A0 | 000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA + A1 | 00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + A2 | 000003CC | GREEK SMALL LETTER OMICRON WITH TONOS + A3 | 000003CD | GREEK SMALL LETTER UPSILON WITH TONOS + A4 | 00000391 | GREEK CAPITAL LETTER ALPHA + A5 | 00000392 | GREEK CAPITAL LETTER BETA + A6 | 00000393 | GREEK CAPITAL LETTER GAMMA + A7 | 00000394 | GREEK CAPITAL LETTER DELTA + A8 | 00000395 | GREEK CAPITAL LETTER EPSILON + A9 | 00000396 | GREEK CAPITAL LETTER ZETA + AA | 00000397 | GREEK CAPITAL LETTER ETA + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 00000398 | GREEK CAPITAL LETTER THETA + AD | 00000399 | GREEK CAPITAL LETTER IOTA + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 0000039A | GREEK CAPITAL LETTER KAPPA + B6 | 0000039B | GREEK CAPITAL LETTER LAMDA + B7 | 0000039D | GREEK CAPITAL LETTER NU + B8 | 0000039C | GREEK CAPITAL LETTER MU + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000039E | GREEK CAPITAL LETTER XI + BE | 0000039F | GREEK CAPITAL LETTER OMICRON + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 000003A0 | GREEK CAPITAL LETTER PI + C7 | 000003A1 | GREEK CAPITAL LETTER RHO + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 000003A3 | GREEK CAPITAL LETTER SIGMA + D0 | 000003A4 | GREEK CAPITAL LETTER TAU + D1 | 000003A5 | GREEK CAPITAL LETTER UPSILON + D2 | 000003A6 | GREEK CAPITAL LETTER PHI + D3 | 000003A7 | GREEK CAPITAL LETTER CHI + D4 | 000003A8 | GREEK CAPITAL LETTER PSI + D5 | 000003A9 | GREEK CAPITAL LETTER OMEGA + D6 | 000003B1 | GREEK SMALL LETTER ALPHA + D7 | 000003B2 | GREEK SMALL LETTER BETA + D8 | 000003B3 | GREEK SMALL LETTER GAMMA + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 000003B4 | GREEK SMALL LETTER DELTA + DE | 000003B5 | GREEK SMALL LETTER EPSILON + DF | 00002580 | UPPER HALF BLOCK + E0 | 000003B6 | GREEK SMALL LETTER ZETA + E1 | 000003B7 | GREEK SMALL LETTER ETA + E2 | 000003B8 | GREEK SMALL LETTER THETA + E3 | 000003B9 | GREEK SMALL LETTER IOTA + E4 | 000003BA | GREEK SMALL LETTER KAPPA + E5 | 000003BB | GREEK SMALL LETTER LAMDA + E6 | 000003BC | GREEK SMALL LETTER MU + E7 | 000003BD | GREEK SMALL LETTER NU + E8 | 000003BE | GREEK SMALL LETTER XI + E9 | 000003BF | GREEK SMALL LETTER OMICRON + EA | 000003C0 | GREEK SMALL LETTER PI + EB | 000003C1 | GREEK SMALL LETTER RHO + EC | 000003C3 | GREEK SMALL LETTER SIGMA + ED | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + EE | 000003C4 | GREEK SMALL LETTER TAU + EF | 000000B4 | ACUTE ACCENT + F0 | 000000AD | SOFT HYPHEN + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 000003C5 | GREEK SMALL LETTER UPSILON + F3 | 000003C6 | GREEK SMALL LETTER PHI + F4 | 000003C7 | GREEK SMALL LETTER CHI + F5 | 000000A7 | SECTION SIGN + F6 | 000003C8 | GREEK SMALL LETTER PSI + F7 | 000002DB | OGONEK + F8 | 000000B0 | DEGREE SIGN + F9 | 000000A8 | DIAERESIS + FA | 000003C9 | GREEK SMALL LETTER OMEGA + FB | 000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA + FC | 000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + FD | 000003CE | GREEK SMALL LETTER OMEGA WITH TONOS + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM852.pm b/lib/Locale/RecodeData/IBM852.pm new file mode 100644 index 0000000..ef14af2 --- /dev/null +++ b/lib/Locale/RecodeData/IBM852.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM852. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM852; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x016f, + 0x0107, + 0x00e7, + 0x0142, + 0x00eb, + 0x0150, + 0x0151, + 0x00ee, + 0x0179, + 0x00c4, + 0x0106, + 0x00c9, + 0x0139, + 0x013a, + 0x00f4, + 0x00f6, + 0x013d, + 0x013e, + 0x015a, + 0x015b, + 0x00d6, + 0x00dc, + 0x0164, + 0x0165, + 0x0141, + 0x00d7, + 0x010d, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x0104, + 0x0105, + 0x017d, + 0x017e, + 0x0118, + 0x0119, + 0x00ac, + 0x017a, + 0x010c, + 0x015f, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x00c1, + 0x00c2, + 0x011a, + 0x015e, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x017b, + 0x017c, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x0102, + 0x0103, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x00a4, + 0x0111, + 0x0110, + 0x010e, + 0x00cb, + 0x010f, + 0x0147, + 0x00cd, + 0x00ce, + 0x011b, + 0x2518, + 0x250c, + 0x2588, + 0x2584, + 0x0162, + 0x016e, + 0x2580, + 0x00d3, + 0x00df, + 0x00d4, + 0x0143, + 0x0144, + 0x0148, + 0x0160, + 0x0161, + 0x0154, + 0x00da, + 0x0155, + 0x0170, + 0x00fd, + 0x00dd, + 0x0163, + 0x00b4, + 0x00ad, + 0x02dd, + 0x02db, + 0x02c7, + 0x02d8, + 0x00a7, + 0x00f7, + 0x00b8, + 0x00b0, + 0x00a8, + 0x02d9, + 0x0171, + 0x0158, + 0x0159, + 0x25a0, + 0x00a0, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc5\xaf", + "\xc4\x87", + "\xc3\xa7", + "\xc5\x82", + "\xc3\xab", + "\xc5\x90", + "\xc5\x91", + "\xc3\xae", + "\xc5\xb9", + "\xc3\x84", + "\xc4\x86", + "\xc3\x89", + "\xc4\xb9", + "\xc4\xba", + "\xc3\xb4", + "\xc3\xb6", + "\xc4\xbd", + "\xc4\xbe", + "\xc5\x9a", + "\xc5\x9b", + "\xc3\x96", + "\xc3\x9c", + "\xc5\xa4", + "\xc5\xa5", + "\xc5\x81", + "\xc3\x97", + "\xc4\x8d", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc4\x84", + "\xc4\x85", + "\xc5\xbd", + "\xc5\xbe", + "\xc4\x98", + "\xc4\x99", + "\xc2\xac", + "\xc5\xba", + "\xc4\x8c", + "\xc5\x9f", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xc3\x81", + "\xc3\x82", + "\xc4\x9a", + "\xc5\x9e", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xc5\xbb", + "\xc5\xbc", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xc4\x82", + "\xc4\x83", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xc2\xa4", + "\xc4\x91", + "\xc4\x90", + "\xc4\x8e", + "\xc3\x8b", + "\xc4\x8f", + "\xc5\x87", + "\xc3\x8d", + "\xc3\x8e", + "\xc4\x9b", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xc5\xa2", + "\xc5\xae", + "\xe2\x96\x80", + "\xc3\x93", + "\xc3\x9f", + "\xc3\x94", + "\xc5\x83", + "\xc5\x84", + "\xc5\x88", + "\xc5\xa0", + "\xc5\xa1", + "\xc5\x94", + "\xc3\x9a", + "\xc5\x95", + "\xc5\xb0", + "\xc3\xbd", + "\xc3\x9d", + "\xc5\xa3", + "\xc2\xb4", + "\xc2\xad", + "\xcb\x9d", + "\xcb\x9b", + "\xcb\x87", + "\xcb\x98", + "\xc2\xa7", + "\xc3\xb7", + "\xc2\xb8", + "\xc2\xb0", + "\xc2\xa8", + "\xcb\x99", + "\xc5\xb1", + "\xc5\x98", + "\xc5\x99", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a4 => "\xcf", + 0x000000a7 => "\xf5", + 0x000000a8 => "\xf9", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000ad => "\xf0", + 0x000000b0 => "\xf8", + 0x000000b4 => "\xef", + 0x000000b8 => "\xf7", + 0x000000bb => "\xaf", + 0x000000c1 => "\xb5", + 0x000000c2 => "\xb6", + 0x000000c4 => "\x8e", + 0x000000c7 => "\x80", + 0x000000c9 => "\x90", + 0x000000cb => "\xd3", + 0x000000cd => "\xd6", + 0x000000ce => "\xd7", + 0x000000d3 => "\xe0", + 0x000000d4 => "\xe2", + 0x000000d6 => "\x99", + 0x000000d7 => "\x9e", + 0x000000da => "\xe9", + 0x000000dc => "\x9a", + 0x000000dd => "\xed", + 0x000000df => "\xe1", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e4 => "\x84", + 0x000000e7 => "\x87", + 0x000000e9 => "\x82", + 0x000000eb => "\x89", + 0x000000ed => "\xa1", + 0x000000ee => "\x8c", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f6 => "\x94", + 0x000000f7 => "\xf6", + 0x000000fa => "\xa3", + 0x000000fc => "\x81", + 0x000000fd => "\xec", + 0x00000102 => "\xc6", + 0x00000103 => "\xc7", + 0x00000104 => "\xa4", + 0x00000105 => "\xa5", + 0x00000106 => "\x8f", + 0x00000107 => "\x86", + 0x0000010c => "\xac", + 0x0000010d => "\x9f", + 0x0000010e => "\xd2", + 0x0000010f => "\xd4", + 0x00000110 => "\xd1", + 0x00000111 => "\xd0", + 0x00000118 => "\xa8", + 0x00000119 => "\xa9", + 0x0000011a => "\xb7", + 0x0000011b => "\xd8", + 0x00000139 => "\x91", + 0x0000013a => "\x92", + 0x0000013d => "\x95", + 0x0000013e => "\x96", + 0x00000141 => "\x9d", + 0x00000142 => "\x88", + 0x00000143 => "\xe3", + 0x00000144 => "\xe4", + 0x00000147 => "\xd5", + 0x00000148 => "\xe5", + 0x00000150 => "\x8a", + 0x00000151 => "\x8b", + 0x00000154 => "\xe8", + 0x00000155 => "\xea", + 0x00000158 => "\xfc", + 0x00000159 => "\xfd", + 0x0000015a => "\x97", + 0x0000015b => "\x98", + 0x0000015e => "\xb8", + 0x0000015f => "\xad", + 0x00000160 => "\xe6", + 0x00000161 => "\xe7", + 0x00000162 => "\xdd", + 0x00000163 => "\xee", + 0x00000164 => "\x9b", + 0x00000165 => "\x9c", + 0x0000016e => "\xde", + 0x0000016f => "\x85", + 0x00000170 => "\xeb", + 0x00000171 => "\xfb", + 0x00000179 => "\x8d", + 0x0000017a => "\xab", + 0x0000017b => "\xbd", + 0x0000017c => "\xbe", + 0x0000017d => "\xa6", + 0x0000017e => "\xa7", + 0x000002c7 => "\xf3", + 0x000002d8 => "\xf4", + 0x000002d9 => "\xfa", + 0x000002db => "\xf2", + 0x000002dd => "\xf1", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002554 => "\xc9", + 0x00002557 => "\xbb", + 0x0000255a => "\xc8", + 0x0000255d => "\xbc", + 0x00002560 => "\xcc", + 0x00002563 => "\xb9", + 0x00002566 => "\xcb", + 0x00002569 => "\xca", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM852 - Conversion routines for IBM852 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM852. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP852 + alias 852 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 0000016F | LATIN SMALL LETTER U WITH RING ABOVE + 86 | 00000107 | LATIN SMALL LETTER C WITH ACUTE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 00000142 | LATIN SMALL LETTER L WITH STROKE + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + 8B | 00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 00000179 | LATIN CAPITAL LETTER Z WITH ACUTE + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 00000139 | LATIN CAPITAL LETTER L WITH ACUTE + 92 | 0000013A | LATIN SMALL LETTER L WITH ACUTE + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 0000013D | LATIN CAPITAL LETTER L WITH CARON + 96 | 0000013E | LATIN SMALL LETTER L WITH CARON + 97 | 0000015A | LATIN CAPITAL LETTER S WITH ACUTE + 98 | 0000015B | LATIN SMALL LETTER S WITH ACUTE + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 00000164 | LATIN CAPITAL LETTER T WITH CARON + 9C | 00000165 | LATIN SMALL LETTER T WITH CARON + 9D | 00000141 | LATIN CAPITAL LETTER L WITH STROKE + 9E | 000000D7 | MULTIPLICATION SIGN + 9F | 0000010D | LATIN SMALL LETTER C WITH CARON + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + A5 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + A6 | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + A7 | 0000017E | LATIN SMALL LETTER Z WITH CARON + A8 | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK + A9 | 00000119 | LATIN SMALL LETTER E WITH OGONEK + AA | 000000AC | NOT SIGN + AB | 0000017A | LATIN SMALL LETTER Z WITH ACUTE + AC | 0000010C | LATIN CAPITAL LETTER C WITH CARON + AD | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + B6 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + B7 | 0000011A | LATIN CAPITAL LETTER E WITH CARON + B8 | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + BE | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 00000102 | LATIN CAPITAL LETTER A WITH BREVE + C7 | 00000103 | LATIN SMALL LETTER A WITH BREVE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 000000A4 | CURRENCY SIGN + D0 | 00000111 | LATIN SMALL LETTER D WITH STROKE + D1 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + D2 | 0000010E | LATIN CAPITAL LETTER D WITH CARON + D3 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + D4 | 0000010F | LATIN SMALL LETTER D WITH CARON + D5 | 00000147 | LATIN CAPITAL LETTER N WITH CARON + D6 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + D7 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + D8 | 0000011B | LATIN SMALL LETTER E WITH CARON + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 00000162 | LATIN CAPITAL LETTER T WITH CEDILLA + DE | 0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE + DF | 00002580 | UPPER HALF BLOCK + E0 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + E1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + E2 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + E3 | 00000143 | LATIN CAPITAL LETTER N WITH ACUTE + E4 | 00000144 | LATIN SMALL LETTER N WITH ACUTE + E5 | 00000148 | LATIN SMALL LETTER N WITH CARON + E6 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + E7 | 00000161 | LATIN SMALL LETTER S WITH CARON + E8 | 00000154 | LATIN CAPITAL LETTER R WITH ACUTE + E9 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + EA | 00000155 | LATIN SMALL LETTER R WITH ACUTE + EB | 00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + EC | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + ED | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + EE | 00000163 | LATIN SMALL LETTER T WITH CEDILLA + EF | 000000B4 | ACUTE ACCENT + F0 | 000000AD | SOFT HYPHEN + F1 | 000002DD | DOUBLE ACUTE ACCENT + F2 | 000002DB | OGONEK + F3 | 000002C7 | CARON (Mandarin Chinese third tone) + F4 | 000002D8 | BREVE + F5 | 000000A7 | SECTION SIGN + F6 | 000000F7 | DIVISION SIGN + F7 | 000000B8 | CEDILLA + F8 | 000000B0 | DEGREE SIGN + F9 | 000000A8 | DIAERESIS + FA | 000002D9 | DOT ABOVE (Mandarin Chinese light tone) + FB | 00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE + FC | 00000158 | LATIN CAPITAL LETTER R WITH CARON + FD | 00000159 | LATIN SMALL LETTER R WITH CARON + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM855.pm b/lib/Locale/RecodeData/IBM855.pm new file mode 100644 index 0000000..6bf6aab --- /dev/null +++ b/lib/Locale/RecodeData/IBM855.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM855. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM855; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0452, + 0x0402, + 0x0453, + 0x0403, + 0x0451, + 0x0401, + 0x0454, + 0x0404, + 0x0455, + 0x0405, + 0x0456, + 0x0406, + 0x0457, + 0x0407, + 0x0458, + 0x0408, + 0x0459, + 0x0409, + 0x045a, + 0x040a, + 0x045b, + 0x040b, + 0x045c, + 0x040c, + 0x045e, + 0x040e, + 0x045f, + 0x040f, + 0x044e, + 0x042e, + 0x044a, + 0x042a, + 0x0430, + 0x0410, + 0x0431, + 0x0411, + 0x0446, + 0x0426, + 0x0434, + 0x0414, + 0x0435, + 0x0415, + 0x0444, + 0x0424, + 0x0433, + 0x0413, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x0445, + 0x0425, + 0x0438, + 0x0418, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x0439, + 0x0419, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x043a, + 0x041a, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x00a4, + 0x043b, + 0x041b, + 0x043c, + 0x041c, + 0x043d, + 0x041d, + 0x043e, + 0x041e, + 0x043f, + 0x2518, + 0x250c, + 0x2588, + 0x2584, + 0x041f, + 0x044f, + 0x2580, + 0x042f, + 0x0440, + 0x0420, + 0x0441, + 0x0421, + 0x0442, + 0x0422, + 0x0443, + 0x0423, + 0x0436, + 0x0416, + 0x0432, + 0x0412, + 0x044c, + 0x042c, + 0x2116, + 0x00ad, + 0x044b, + 0x042b, + 0x0437, + 0x0417, + 0x0448, + 0x0428, + 0x044d, + 0x042d, + 0x0449, + 0x0429, + 0x0447, + 0x0427, + 0x00a7, + 0x25a0, + 0x00a0, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd1\x92", + "\xd0\x82", + "\xd1\x93", + "\xd0\x83", + "\xd1\x91", + "\xd0\x81", + "\xd1\x94", + "\xd0\x84", + "\xd1\x95", + "\xd0\x85", + "\xd1\x96", + "\xd0\x86", + "\xd1\x97", + "\xd0\x87", + "\xd1\x98", + "\xd0\x88", + "\xd1\x99", + "\xd0\x89", + "\xd1\x9a", + "\xd0\x8a", + "\xd1\x9b", + "\xd0\x8b", + "\xd1\x9c", + "\xd0\x8c", + "\xd1\x9e", + "\xd0\x8e", + "\xd1\x9f", + "\xd0\x8f", + "\xd1\x8e", + "\xd0\xae", + "\xd1\x8a", + "\xd0\xaa", + "\xd0\xb0", + "\xd0\x90", + "\xd0\xb1", + "\xd0\x91", + "\xd1\x86", + "\xd0\xa6", + "\xd0\xb4", + "\xd0\x94", + "\xd0\xb5", + "\xd0\x95", + "\xd1\x84", + "\xd0\xa4", + "\xd0\xb3", + "\xd0\x93", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xd1\x85", + "\xd0\xa5", + "\xd0\xb8", + "\xd0\x98", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xd0\xb9", + "\xd0\x99", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xd0\xba", + "\xd0\x9a", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xc2\xa4", + "\xd0\xbb", + "\xd0\x9b", + "\xd0\xbc", + "\xd0\x9c", + "\xd0\xbd", + "\xd0\x9d", + "\xd0\xbe", + "\xd0\x9e", + "\xd0\xbf", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xd0\x9f", + "\xd1\x8f", + "\xe2\x96\x80", + "\xd0\xaf", + "\xd1\x80", + "\xd0\xa0", + "\xd1\x81", + "\xd0\xa1", + "\xd1\x82", + "\xd0\xa2", + "\xd1\x83", + "\xd0\xa3", + "\xd0\xb6", + "\xd0\x96", + "\xd0\xb2", + "\xd0\x92", + "\xd1\x8c", + "\xd0\xac", + "\xe2\x84\x96", + "\xc2\xad", + "\xd1\x8b", + "\xd0\xab", + "\xd0\xb7", + "\xd0\x97", + "\xd1\x88", + "\xd0\xa8", + "\xd1\x8d", + "\xd0\xad", + "\xd1\x89", + "\xd0\xa9", + "\xd1\x87", + "\xd0\xa7", + "\xc2\xa7", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a4 => "\xcf", + 0x000000a7 => "\xfd", + 0x000000ab => "\xae", + 0x000000ad => "\xf0", + 0x000000bb => "\xaf", + 0x00000401 => "\x85", + 0x00000402 => "\x81", + 0x00000403 => "\x83", + 0x00000404 => "\x87", + 0x00000405 => "\x89", + 0x00000406 => "\x8b", + 0x00000407 => "\x8d", + 0x00000408 => "\x8f", + 0x00000409 => "\x91", + 0x0000040a => "\x93", + 0x0000040b => "\x95", + 0x0000040c => "\x97", + 0x0000040e => "\x99", + 0x0000040f => "\x9b", + 0x00000410 => "\xa1", + 0x00000411 => "\xa3", + 0x00000412 => "\xec", + 0x00000413 => "\xad", + 0x00000414 => "\xa7", + 0x00000415 => "\xa9", + 0x00000416 => "\xea", + 0x00000417 => "\xf4", + 0x00000418 => "\xb8", + 0x00000419 => "\xbe", + 0x0000041a => "\xc7", + 0x0000041b => "\xd1", + 0x0000041c => "\xd3", + 0x0000041d => "\xd5", + 0x0000041e => "\xd7", + 0x0000041f => "\xdd", + 0x00000420 => "\xe2", + 0x00000421 => "\xe4", + 0x00000422 => "\xe6", + 0x00000423 => "\xe8", + 0x00000424 => "\xab", + 0x00000425 => "\xb6", + 0x00000426 => "\xa5", + 0x00000427 => "\xfc", + 0x00000428 => "\xf6", + 0x00000429 => "\xfa", + 0x0000042a => "\x9f", + 0x0000042b => "\xf2", + 0x0000042c => "\xee", + 0x0000042d => "\xf8", + 0x0000042e => "\x9d", + 0x0000042f => "\xe0", + 0x00000430 => "\xa0", + 0x00000431 => "\xa2", + 0x00000432 => "\xeb", + 0x00000433 => "\xac", + 0x00000434 => "\xa6", + 0x00000435 => "\xa8", + 0x00000436 => "\xe9", + 0x00000437 => "\xf3", + 0x00000438 => "\xb7", + 0x00000439 => "\xbd", + 0x0000043a => "\xc6", + 0x0000043b => "\xd0", + 0x0000043c => "\xd2", + 0x0000043d => "\xd4", + 0x0000043e => "\xd6", + 0x0000043f => "\xd8", + 0x00000440 => "\xe1", + 0x00000441 => "\xe3", + 0x00000442 => "\xe5", + 0x00000443 => "\xe7", + 0x00000444 => "\xaa", + 0x00000445 => "\xb5", + 0x00000446 => "\xa4", + 0x00000447 => "\xfb", + 0x00000448 => "\xf5", + 0x00000449 => "\xf9", + 0x0000044a => "\x9e", + 0x0000044b => "\xf1", + 0x0000044c => "\xed", + 0x0000044d => "\xf7", + 0x0000044e => "\x9c", + 0x0000044f => "\xde", + 0x00000451 => "\x84", + 0x00000452 => "\x80", + 0x00000453 => "\x82", + 0x00000454 => "\x86", + 0x00000455 => "\x88", + 0x00000456 => "\x8a", + 0x00000457 => "\x8c", + 0x00000458 => "\x8e", + 0x00000459 => "\x90", + 0x0000045a => "\x92", + 0x0000045b => "\x94", + 0x0000045c => "\x96", + 0x0000045e => "\x98", + 0x0000045f => "\x9a", + 0x00002116 => "\xef", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002554 => "\xc9", + 0x00002557 => "\xbb", + 0x0000255a => "\xc8", + 0x0000255d => "\xbc", + 0x00002560 => "\xcc", + 0x00002563 => "\xb9", + 0x00002566 => "\xcb", + 0x00002569 => "\xca", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM855 - Conversion routines for IBM855 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM855. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP855 + alias 855 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian) + 81 | 00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian) + 82 | 00000453 | CYRILLIC SMALL LETTER GJE + 83 | 00000403 | CYRILLIC CAPITAL LETTER GJE + 84 | 00000451 | CYRILLIC SMALL LETTER IO + 85 | 00000401 | CYRILLIC CAPITAL LETTER IO + 86 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + 87 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + 88 | 00000455 | CYRILLIC SMALL LETTER DZE + 89 | 00000405 | CYRILLIC CAPITAL LETTER DZE + 8A | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 8B | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 8C | 00000457 | CYRILLIC SMALL LETTER YI (Ukrainian) + 8D | 00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian) + 8E | 00000458 | CYRILLIC SMALL LETTER JE + 8F | 00000408 | CYRILLIC CAPITAL LETTER JE + 90 | 00000459 | CYRILLIC SMALL LETTER LJE + 91 | 00000409 | CYRILLIC CAPITAL LETTER LJE + 92 | 0000045A | CYRILLIC SMALL LETTER NJE + 93 | 0000040A | CYRILLIC CAPITAL LETTER NJE + 94 | 0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian) + 95 | 0000040B | CYRILLIC CAPITAL LETTER TSHE + 96 | 0000045C | CYRILLIC SMALL LETTER KJE + 97 | 0000040C | CYRILLIC CAPITAL LETTER KJE + 98 | 0000045E | CYRILLIC SMALL LETTER SHORT U (Byelorussian) + 99 | 0000040E | CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) + 9A | 0000045F | CYRILLIC SMALL LETTER DZHE + 9B | 0000040F | CYRILLIC CAPITAL LETTER DZHE + 9C | 0000044E | CYRILLIC SMALL LETTER YU + 9D | 0000042E | CYRILLIC CAPITAL LETTER YU + 9E | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + 9F | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + A0 | 00000430 | CYRILLIC SMALL LETTER A + A1 | 00000410 | CYRILLIC CAPITAL LETTER A + A2 | 00000431 | CYRILLIC SMALL LETTER BE + A3 | 00000411 | CYRILLIC CAPITAL LETTER BE + A4 | 00000446 | CYRILLIC SMALL LETTER TSE + A5 | 00000426 | CYRILLIC CAPITAL LETTER TSE + A6 | 00000434 | CYRILLIC SMALL LETTER DE + A7 | 00000414 | CYRILLIC CAPITAL LETTER DE + A8 | 00000435 | CYRILLIC SMALL LETTER IE + A9 | 00000415 | CYRILLIC CAPITAL LETTER IE + AA | 00000444 | CYRILLIC SMALL LETTER EF + AB | 00000424 | CYRILLIC CAPITAL LETTER EF + AC | 00000433 | CYRILLIC SMALL LETTER GHE + AD | 00000413 | CYRILLIC CAPITAL LETTER GHE + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 00000445 | CYRILLIC SMALL LETTER HA + B6 | 00000425 | CYRILLIC CAPITAL LETTER HA + B7 | 00000438 | CYRILLIC SMALL LETTER I + B8 | 00000418 | CYRILLIC CAPITAL LETTER I + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 00000439 | CYRILLIC SMALL LETTER SHORT I + BE | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 0000043A | CYRILLIC SMALL LETTER KA + C7 | 0000041A | CYRILLIC CAPITAL LETTER KA + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 000000A4 | CURRENCY SIGN + D0 | 0000043B | CYRILLIC SMALL LETTER EL + D1 | 0000041B | CYRILLIC CAPITAL LETTER EL + D2 | 0000043C | CYRILLIC SMALL LETTER EM + D3 | 0000041C | CYRILLIC CAPITAL LETTER EM + D4 | 0000043D | CYRILLIC SMALL LETTER EN + D5 | 0000041D | CYRILLIC CAPITAL LETTER EN + D6 | 0000043E | CYRILLIC SMALL LETTER O + D7 | 0000041E | CYRILLIC CAPITAL LETTER O + D8 | 0000043F | CYRILLIC SMALL LETTER PE + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 0000041F | CYRILLIC CAPITAL LETTER PE + DE | 0000044F | CYRILLIC SMALL LETTER YA + DF | 00002580 | UPPER HALF BLOCK + E0 | 0000042F | CYRILLIC CAPITAL LETTER YA + E1 | 00000440 | CYRILLIC SMALL LETTER ER + E2 | 00000420 | CYRILLIC CAPITAL LETTER ER + E3 | 00000441 | CYRILLIC SMALL LETTER ES + E4 | 00000421 | CYRILLIC CAPITAL LETTER ES + E5 | 00000442 | CYRILLIC SMALL LETTER TE + E6 | 00000422 | CYRILLIC CAPITAL LETTER TE + E7 | 00000443 | CYRILLIC SMALL LETTER U + E8 | 00000423 | CYRILLIC CAPITAL LETTER U + E9 | 00000436 | CYRILLIC SMALL LETTER ZHE + EA | 00000416 | CYRILLIC CAPITAL LETTER ZHE + EB | 00000432 | CYRILLIC SMALL LETTER VE + EC | 00000412 | CYRILLIC CAPITAL LETTER VE + ED | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + EE | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + EF | 00002116 | NUMERO SIGN + F0 | 000000AD | SOFT HYPHEN + F1 | 0000044B | CYRILLIC SMALL LETTER YERU + F2 | 0000042B | CYRILLIC CAPITAL LETTER YERU + F3 | 00000437 | CYRILLIC SMALL LETTER ZE + F4 | 00000417 | CYRILLIC CAPITAL LETTER ZE + F5 | 00000448 | CYRILLIC SMALL LETTER SHA + F6 | 00000428 | CYRILLIC CAPITAL LETTER SHA + F7 | 0000044D | CYRILLIC SMALL LETTER E + F8 | 0000042D | CYRILLIC CAPITAL LETTER E + F9 | 00000449 | CYRILLIC SMALL LETTER SHCHA + FA | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + FB | 00000447 | CYRILLIC SMALL LETTER CHE + FC | 00000427 | CYRILLIC CAPITAL LETTER CHE + FD | 000000A7 | SECTION SIGN + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM857.pm b/lib/Locale/RecodeData/IBM857.pm new file mode 100644 index 0000000..b044faa --- /dev/null +++ b/lib/Locale/RecodeData/IBM857.pm @@ -0,0 +1,1135 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM857. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM857; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e5, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ef, + 0x00ee, + 0x0131, + 0x00c4, + 0x00c5, + 0x00c9, + 0x00e6, + 0x00c6, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00fb, + 0x00f9, + 0x0130, + 0x00d6, + 0x00dc, + 0x00f8, + 0x00a3, + 0x00d8, + 0x015e, + 0x015f, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00f1, + 0x00d1, + 0x011e, + 0x011f, + 0x00bf, + 0x00ae, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x00c1, + 0x00c2, + 0x00c0, + 0x00a9, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x00a2, + 0x00a5, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x00e3, + 0x00c3, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x00a4, + 0x00ba, + 0x00aa, + 0x00ca, + 0x00cb, + 0x00c8, + 0xfffd, + 0x00cd, + 0x00ce, + 0x00cf, + 0x2518, + 0x250c, + 0x2588, + 0x2584, + 0x00a6, + 0x00cc, + 0x2580, + 0x00d3, + 0x00df, + 0x00d4, + 0x00d2, + 0x00f5, + 0x00d5, + 0x00b5, + 0xfffd, + 0x00d7, + 0x00da, + 0x00db, + 0x00d9, + 0x00ec, + 0x00ff, + 0x00af, + 0x00b4, + 0x00ad, + 0x00b1, + 0xfffd, + 0x00be, + 0x00b6, + 0x00a7, + 0x00f7, + 0x00b8, + 0x00b0, + 0x00a8, + 0x00b7, + 0x00b9, + 0x00b3, + 0x00b2, + 0x25a0, + 0x00a0, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xaf", + "\xc3\xae", + "\xc4\xb1", + "\xc3\x84", + "\xc3\x85", + "\xc3\x89", + "\xc3\xa6", + "\xc3\x86", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xbb", + "\xc3\xb9", + "\xc4\xb0", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xb8", + "\xc2\xa3", + "\xc3\x98", + "\xc5\x9e", + "\xc5\x9f", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xb1", + "\xc3\x91", + "\xc4\x9e", + "\xc4\x9f", + "\xc2\xbf", + "\xc2\xae", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xc3\x81", + "\xc3\x82", + "\xc3\x80", + "\xc2\xa9", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xc2\xa2", + "\xc2\xa5", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xc3\xa3", + "\xc3\x83", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xc2\xa4", + "\xc2\xba", + "\xc2\xaa", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xef\xbf\xbd", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xc2\xa6", + "\xc3\x8c", + "\xe2\x96\x80", + "\xc3\x93", + "\xc3\x9f", + "\xc3\x94", + "\xc3\x92", + "\xc3\xb5", + "\xc3\x95", + "\xc2\xb5", + "\xef\xbf\xbd", + "\xc3\x97", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x99", + "\xc3\xac", + "\xc3\xbf", + "\xc2\xaf", + "\xc2\xb4", + "\xc2\xad", + "\xc2\xb1", + "\xef\xbf\xbd", + "\xc2\xbe", + "\xc2\xb6", + "\xc2\xa7", + "\xc3\xb7", + "\xc2\xb8", + "\xc2\xb0", + "\xc2\xa8", + "\xc2\xb7", + "\xc2\xb9", + "\xc2\xb3", + "\xc2\xb2", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a1 => "\xad", + 0x000000a2 => "\xbd", + 0x000000a3 => "\x9c", + 0x000000a4 => "\xcf", + 0x000000a5 => "\xbe", + 0x000000a6 => "\xdd", + 0x000000a7 => "\xf5", + 0x000000a8 => "\xf9", + 0x000000a9 => "\xb8", + 0x000000aa => "\xd1", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000ad => "\xf0", + 0x000000ae => "\xa9", + 0x000000af => "\xee", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b3 => "\xfc", + 0x000000b4 => "\xef", + 0x000000b5 => "\xe6", + 0x000000b6 => "\xf4", + 0x000000b7 => "\xfa", + 0x000000b8 => "\xf7", + 0x000000b9 => "\xfb", + 0x000000ba => "\xd0", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000be => "\xf3", + 0x000000bf => "\xa8", + 0x000000c0 => "\xb7", + 0x000000c1 => "\xb5", + 0x000000c2 => "\xb6", + 0x000000c3 => "\xc7", + 0x000000c4 => "\x8e", + 0x000000c5 => "\x8f", + 0x000000c6 => "\x92", + 0x000000c7 => "\x80", + 0x000000c8 => "\xd4", + 0x000000c9 => "\x90", + 0x000000ca => "\xd2", + 0x000000cb => "\xd3", + 0x000000cc => "\xde", + 0x000000cd => "\xd6", + 0x000000ce => "\xd7", + 0x000000cf => "\xd8", + 0x000000d1 => "\xa5", + 0x000000d2 => "\xe3", + 0x000000d3 => "\xe0", + 0x000000d4 => "\xe2", + 0x000000d5 => "\xe5", + 0x000000d6 => "\x99", + 0x000000d7 => "\xe8", + 0x000000d8 => "\x9d", + 0x000000d9 => "\xeb", + 0x000000da => "\xe9", + 0x000000db => "\xea", + 0x000000dc => "\x9a", + 0x000000df => "\xe1", + 0x000000e0 => "\x85", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e3 => "\xc6", + 0x000000e4 => "\x84", + 0x000000e5 => "\x86", + 0x000000e6 => "\x91", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ec => "\xec", + 0x000000ed => "\xa1", + 0x000000ee => "\x8c", + 0x000000ef => "\x8b", + 0x000000f1 => "\xa4", + 0x000000f2 => "\x95", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f5 => "\xe4", + 0x000000f6 => "\x94", + 0x000000f7 => "\xf6", + 0x000000f8 => "\x9b", + 0x000000f9 => "\x97", + 0x000000fa => "\xa3", + 0x000000fb => "\x96", + 0x000000fc => "\x81", + 0x000000ff => "\xed", + 0x0000011e => "\xa6", + 0x0000011f => "\xa7", + 0x00000130 => "\x98", + 0x00000131 => "\x8d", + 0x0000015e => "\x9e", + 0x0000015f => "\x9f", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002554 => "\xc9", + 0x00002557 => "\xbb", + 0x0000255a => "\xc8", + 0x0000255d => "\xbc", + 0x00002560 => "\xcc", + 0x00002563 => "\xb9", + 0x00002566 => "\xcb", + 0x00002569 => "\xca", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM857 - Conversion routines for IBM857 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM857. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP857 + alias 857 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 00000131 | LATIN SMALL LETTER DOTLESS I + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000E6 | LATIN SMALL LETTER AE + 92 | 000000C6 | LATIN CAPITAL LETTER AE + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 98 | 00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 9C | 000000A3 | POUND SIGN + 9D | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 9E | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + 9F | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + A6 | 0000011E | LATIN CAPITAL LETTER G WITH BREVE + A7 | 0000011F | LATIN SMALL LETTER G WITH BREVE + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 000000AE | REGISTERED SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + B6 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + B7 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + B8 | 000000A9 | COPYRIGHT SIGN + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 000000A2 | CENT SIGN + BE | 000000A5 | YEN SIGN + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + C7 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 000000A4 | CURRENCY SIGN + D0 | 000000BA | MASCULINE ORDINAL INDICATOR + D1 | 000000AA | FEMININE ORDINAL INDICATOR + D2 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + D3 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + D4 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + D6 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + D7 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + D8 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 000000A6 | BROKEN BAR + DE | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + DF | 00002580 | UPPER HALF BLOCK + E0 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + E1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + E2 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + E3 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + E4 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + E5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + E6 | 000000B5 | MICRO SIGN + E8 | 000000D7 | MULTIPLICATION SIGN + E9 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + EA | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + EB | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + EE | 000000AF | MACRON + EF | 000000B4 | ACUTE ACCENT + F0 | 000000AD | SOFT HYPHEN + F1 | 000000B1 | PLUS-MINUS SIGN + F3 | 000000BE | VULGAR FRACTION THREE QUARTERS + F4 | 000000B6 | PILCROW SIGN + F5 | 000000A7 | SECTION SIGN + F6 | 000000F7 | DIVISION SIGN + F7 | 000000B8 | CEDILLA + F8 | 000000B0 | DEGREE SIGN + F9 | 000000A8 | DIAERESIS + FA | 000000B7 | MIDDLE DOT + FB | 000000B9 | SUPERSCRIPT ONE + FC | 000000B3 | SUPERSCRIPT THREE + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM860.pm b/lib/Locale/RecodeData/IBM860.pm new file mode 100644 index 0000000..cd66bcb --- /dev/null +++ b/lib/Locale/RecodeData/IBM860.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM860. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM860; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e3, + 0x00e0, + 0x00c1, + 0x00e7, + 0x00ea, + 0x00ca, + 0x00e8, + 0x00cd, + 0x00d4, + 0x00ec, + 0x00c3, + 0x00c2, + 0x00c9, + 0x00c0, + 0x00c8, + 0x00f4, + 0x00f5, + 0x00f2, + 0x00da, + 0x00f9, + 0x00cc, + 0x00d5, + 0x00dc, + 0x00a2, + 0x00a3, + 0x00d9, + 0x20a7, + 0x00d3, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00f1, + 0x00d1, + 0x00aa, + 0x00ba, + 0x00bf, + 0x00d2, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x2561, + 0x2562, + 0x2556, + 0x2555, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x255c, + 0x255b, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x255e, + 0x255f, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x2567, + 0x2568, + 0x2564, + 0x2565, + 0x2559, + 0x2558, + 0x2552, + 0x2553, + 0x256b, + 0x256a, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa0", + "\xc3\x81", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\x8a", + "\xc3\xa8", + "\xc3\x8d", + "\xc3\x94", + "\xc3\xac", + "\xc3\x83", + "\xc3\x82", + "\xc3\x89", + "\xc3\x80", + "\xc3\x88", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb2", + "\xc3\x9a", + "\xc3\xb9", + "\xc3\x8c", + "\xc3\x95", + "\xc3\x9c", + "\xc2\xa2", + "\xc2\xa3", + "\xc3\x99", + "\xe2\x82\xa7", + "\xc3\x93", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xb1", + "\xc3\x91", + "\xc2\xaa", + "\xc2\xba", + "\xc2\xbf", + "\xc3\x92", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xe2\x95\xa1", + "\xe2\x95\xa2", + "\xe2\x95\x96", + "\xe2\x95\x95", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xe2\x95\x9c", + "\xe2\x95\x9b", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa4", + "\xe2\x95\xa5", + "\xe2\x95\x99", + "\xe2\x95\x98", + "\xe2\x95\x92", + "\xe2\x95\x93", + "\xe2\x95\xab", + "\xe2\x95\xaa", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x80", + "\xce\xb1", + "\xc3\x9f", + "\xce\x93", + "\xcf\x80", + "\xce\xa3", + "\xcf\x83", + "\xc2\xb5", + "\xcf\x84", + "\xce\xa6", + "\xce\x98", + "\xce\xa9", + "\xce\xb4", + "\xe2\x88\x9e", + "\xcf\x86", + "\xce\xb5", + "\xe2\x88\xa9", + "\xe2\x89\xa1", + "\xc2\xb1", + "\xe2\x89\xa5", + "\xe2\x89\xa4", + "\xe2\x8c\xa0", + "\xe2\x8c\xa1", + "\xc3\xb7", + "\xe2\x89\x88", + "\xc2\xb0", + "\xe2\x88\x99", + "\xc2\xb7", + "\xe2\x88\x9a", + "\xe2\x81\xbf", + "\xc2\xb2", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a1 => "\xad", + 0x000000a2 => "\x9b", + 0x000000a3 => "\x9c", + 0x000000aa => "\xa6", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b5 => "\xe6", + 0x000000b7 => "\xfa", + 0x000000ba => "\xa7", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000bf => "\xa8", + 0x000000c0 => "\x91", + 0x000000c1 => "\x86", + 0x000000c2 => "\x8f", + 0x000000c3 => "\x8e", + 0x000000c7 => "\x80", + 0x000000c8 => "\x92", + 0x000000c9 => "\x90", + 0x000000ca => "\x89", + 0x000000cc => "\x98", + 0x000000cd => "\x8b", + 0x000000d1 => "\xa5", + 0x000000d2 => "\xa9", + 0x000000d3 => "\x9f", + 0x000000d4 => "\x8c", + 0x000000d5 => "\x99", + 0x000000d9 => "\x9d", + 0x000000da => "\x96", + 0x000000dc => "\x9a", + 0x000000df => "\xe1", + 0x000000e0 => "\x85", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e3 => "\x84", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000ec => "\x8d", + 0x000000ed => "\xa1", + 0x000000f1 => "\xa4", + 0x000000f2 => "\x95", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f5 => "\x94", + 0x000000f7 => "\xf6", + 0x000000f9 => "\x97", + 0x000000fa => "\xa3", + 0x000000fc => "\x81", + 0x00000393 => "\xe2", + 0x00000398 => "\xe9", + 0x000003a3 => "\xe4", + 0x000003a6 => "\xe8", + 0x000003a9 => "\xea", + 0x000003b1 => "\xe0", + 0x000003b4 => "\xeb", + 0x000003b5 => "\xee", + 0x000003c0 => "\xe3", + 0x000003c3 => "\xe5", + 0x000003c4 => "\xe7", + 0x000003c6 => "\xed", + 0x0000207f => "\xfc", + 0x000020a7 => "\x9e", + 0x00002219 => "\xf9", + 0x0000221a => "\xfb", + 0x0000221e => "\xec", + 0x00002229 => "\xef", + 0x00002248 => "\xf7", + 0x00002261 => "\xf0", + 0x00002264 => "\xf3", + 0x00002265 => "\xf2", + 0x00002320 => "\xf4", + 0x00002321 => "\xf5", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002552 => "\xd5", + 0x00002553 => "\xd6", + 0x00002554 => "\xc9", + 0x00002555 => "\xb8", + 0x00002556 => "\xb7", + 0x00002557 => "\xbb", + 0x00002558 => "\xd4", + 0x00002559 => "\xd3", + 0x0000255a => "\xc8", + 0x0000255b => "\xbe", + 0x0000255c => "\xbd", + 0x0000255d => "\xbc", + 0x0000255e => "\xc6", + 0x0000255f => "\xc7", + 0x00002560 => "\xcc", + 0x00002561 => "\xb5", + 0x00002562 => "\xb6", + 0x00002563 => "\xb9", + 0x00002564 => "\xd1", + 0x00002565 => "\xd2", + 0x00002566 => "\xcb", + 0x00002567 => "\xcf", + 0x00002568 => "\xd0", + 0x00002569 => "\xca", + 0x0000256a => "\xd8", + 0x0000256b => "\xd7", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x0000258c => "\xdd", + 0x00002590 => "\xde", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM860 - Conversion routines for IBM860 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM860. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP860 + alias 860 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 8C | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 8D | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 8E | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 8F | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 92 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 95 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 96 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + 97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 98 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 99 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000A2 | CENT SIGN + 9C | 000000A3 | POUND SIGN + 9D | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + 9E | 000020A7 | PESETA SIGN + 9F | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + A6 | 000000AA | FEMININE ORDINAL INDICATOR + A7 | 000000BA | MASCULINE ORDINAL INDICATOR + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 0000258C | LEFT HALF BLOCK + DE | 00002590 | RIGHT HALF BLOCK + DF | 00002580 | UPPER HALF BLOCK + E0 | 000003B1 | GREEK SMALL LETTER ALPHA + E1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + E2 | 00000393 | GREEK CAPITAL LETTER GAMMA + E3 | 000003C0 | GREEK SMALL LETTER PI + E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA + E5 | 000003C3 | GREEK SMALL LETTER SIGMA + E6 | 000000B5 | MICRO SIGN + E7 | 000003C4 | GREEK SMALL LETTER TAU + E8 | 000003A6 | GREEK CAPITAL LETTER PHI + E9 | 00000398 | GREEK CAPITAL LETTER THETA + EA | 000003A9 | GREEK CAPITAL LETTER OMEGA + EB | 000003B4 | GREEK SMALL LETTER DELTA + EC | 0000221E | INFINITY + ED | 000003C6 | GREEK SMALL LETTER PHI + EE | 000003B5 | GREEK SMALL LETTER EPSILON + EF | 00002229 | INTERSECTION + F0 | 00002261 | IDENTICAL TO + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002265 | GREATER-THAN OR EQUAL TO + F3 | 00002264 | LESS-THAN OR EQUAL TO + F4 | 00002320 | TOP HALF INTEGRAL + F5 | 00002321 | BOTTOM HALF INTEGRAL + F6 | 000000F7 | DIVISION SIGN + F7 | 00002248 | ALMOST EQUAL TO + F8 | 000000B0 | DEGREE SIGN + F9 | 00002219 | BULLET OPERATOR + FA | 000000B7 | MIDDLE DOT + FB | 0000221A | SQUARE ROOT + FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM861.pm b/lib/Locale/RecodeData/IBM861.pm new file mode 100644 index 0000000..18b3468 --- /dev/null +++ b/lib/Locale/RecodeData/IBM861.pm @@ -0,0 +1,1142 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM861. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM861; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e5, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00d0, + 0x00f0, + 0x00de, + 0x00c4, + 0x00c5, + 0x00c9, + 0x00e6, + 0x00c6, + 0x00f4, + 0x00f6, + 0x00fe, + 0x00fb, + 0x00dd, + 0x00fd, + 0x00d6, + 0x00dc, + 0x00f8, + 0x00a3, + 0x00d8, + 0x20a7, + 0x0192, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00c1, + 0x00cd, + 0x00d3, + 0x00da, + 0x00bf, + 0x2310, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x2561, + 0x2562, + 0x2556, + 0x2555, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x255c, + 0x255b, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x255e, + 0x255f, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x2567, + 0x2568, + 0x2564, + 0x2565, + 0x2559, + 0x2558, + 0x2552, + 0x2553, + 0x256b, + 0x256a, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\x90", + "\xc3\xb0", + "\xc3\x9e", + "\xc3\x84", + "\xc3\x85", + "\xc3\x89", + "\xc3\xa6", + "\xc3\x86", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xbe", + "\xc3\xbb", + "\xc3\x9d", + "\xc3\xbd", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xb8", + "\xc2\xa3", + "\xc3\x98", + "\xe2\x82\xa7", + "\xc6\x92", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\x81", + "\xc3\x8d", + "\xc3\x93", + "\xc3\x9a", + "\xc2\xbf", + "\xe2\x8c\x90", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xe2\x95\xa1", + "\xe2\x95\xa2", + "\xe2\x95\x96", + "\xe2\x95\x95", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xe2\x95\x9c", + "\xe2\x95\x9b", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa4", + "\xe2\x95\xa5", + "\xe2\x95\x99", + "\xe2\x95\x98", + "\xe2\x95\x92", + "\xe2\x95\x93", + "\xe2\x95\xab", + "\xe2\x95\xaa", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x80", + "\xce\xb1", + "\xc3\x9f", + "\xce\x93", + "\xcf\x80", + "\xce\xa3", + "\xcf\x83", + "\xc2\xb5", + "\xcf\x84", + "\xce\xa6", + "\xce\x98", + "\xce\xa9", + "\xce\xb4", + "\xe2\x88\x9e", + "\xcf\x86", + "\xce\xb5", + "\xe2\x88\xa9", + "\xe2\x89\xa1", + "\xc2\xb1", + "\xe2\x89\xa5", + "\xe2\x89\xa4", + "\xe2\x8c\xa0", + "\xe2\x8c\xa1", + "\xc3\xb7", + "\xe2\x89\x88", + "\xc2\xb0", + "\xe2\x88\x99", + "\xc2\xb7", + "\xe2\x88\x9a", + "\xe2\x81\xbf", + "\xc2\xb2", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a1 => "\xad", + 0x000000a3 => "\x9c", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b5 => "\xe6", + 0x000000b7 => "\xfa", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000bf => "\xa8", + 0x000000c1 => "\xa4", + 0x000000c4 => "\x8e", + 0x000000c5 => "\x8f", + 0x000000c6 => "\x92", + 0x000000c7 => "\x80", + 0x000000c9 => "\x90", + 0x000000cd => "\xa5", + 0x000000d0 => "\x8b", + 0x000000d3 => "\xa6", + 0x000000d6 => "\x99", + 0x000000d8 => "\x9d", + 0x000000da => "\xa7", + 0x000000dc => "\x9a", + 0x000000dd => "\x97", + 0x000000de => "\x8d", + 0x000000df => "\xe1", + 0x000000e0 => "\x85", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e4 => "\x84", + 0x000000e5 => "\x86", + 0x000000e6 => "\x91", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ed => "\xa1", + 0x000000f0 => "\x8c", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f6 => "\x94", + 0x000000f7 => "\xf6", + 0x000000f8 => "\x9b", + 0x000000fa => "\xa3", + 0x000000fb => "\x96", + 0x000000fc => "\x81", + 0x000000fd => "\x98", + 0x000000fe => "\x95", + 0x00000192 => "\x9f", + 0x00000393 => "\xe2", + 0x00000398 => "\xe9", + 0x000003a3 => "\xe4", + 0x000003a6 => "\xe8", + 0x000003a9 => "\xea", + 0x000003b1 => "\xe0", + 0x000003b4 => "\xeb", + 0x000003b5 => "\xee", + 0x000003c0 => "\xe3", + 0x000003c3 => "\xe5", + 0x000003c4 => "\xe7", + 0x000003c6 => "\xed", + 0x0000207f => "\xfc", + 0x000020a7 => "\x9e", + 0x00002219 => "\xf9", + 0x0000221a => "\xfb", + 0x0000221e => "\xec", + 0x00002229 => "\xef", + 0x00002248 => "\xf7", + 0x00002261 => "\xf0", + 0x00002264 => "\xf3", + 0x00002265 => "\xf2", + 0x00002310 => "\xa9", + 0x00002320 => "\xf4", + 0x00002321 => "\xf5", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002552 => "\xd5", + 0x00002553 => "\xd6", + 0x00002554 => "\xc9", + 0x00002555 => "\xb8", + 0x00002556 => "\xb7", + 0x00002557 => "\xbb", + 0x00002558 => "\xd4", + 0x00002559 => "\xd3", + 0x0000255a => "\xc8", + 0x0000255b => "\xbe", + 0x0000255c => "\xbd", + 0x0000255d => "\xbc", + 0x0000255e => "\xc6", + 0x0000255f => "\xc7", + 0x00002560 => "\xcc", + 0x00002561 => "\xb5", + 0x00002562 => "\xb6", + 0x00002563 => "\xb9", + 0x00002564 => "\xd1", + 0x00002565 => "\xd2", + 0x00002566 => "\xcb", + 0x00002567 => "\xcf", + 0x00002568 => "\xd0", + 0x00002569 => "\xca", + 0x0000256a => "\xd8", + 0x0000256b => "\xd7", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x0000258c => "\xdd", + 0x00002590 => "\xde", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM861 - Conversion routines for IBM861 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM861. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP861 + alias 861 + alias CP-IS + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + 8C | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 8D | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000E6 | LATIN SMALL LETTER AE + 92 | 000000C6 | LATIN CAPITAL LETTER AE + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 97 | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + 98 | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 9C | 000000A3 | POUND SIGN + 9D | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 9E | 000020A7 | PESETA SIGN + 9F | 00000192 | LATIN SMALL LETTER F WITH HOOK + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + A5 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + A6 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + A7 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 00002310 | REVERSED NOT SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 0000258C | LEFT HALF BLOCK + DE | 00002590 | RIGHT HALF BLOCK + DF | 00002580 | UPPER HALF BLOCK + E0 | 000003B1 | GREEK SMALL LETTER ALPHA + E1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + E2 | 00000393 | GREEK CAPITAL LETTER GAMMA + E3 | 000003C0 | GREEK SMALL LETTER PI + E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA + E5 | 000003C3 | GREEK SMALL LETTER SIGMA + E6 | 000000B5 | MICRO SIGN + E7 | 000003C4 | GREEK SMALL LETTER TAU + E8 | 000003A6 | GREEK CAPITAL LETTER PHI + E9 | 00000398 | GREEK CAPITAL LETTER THETA + EA | 000003A9 | GREEK CAPITAL LETTER OMEGA + EB | 000003B4 | GREEK SMALL LETTER DELTA + EC | 0000221E | INFINITY + ED | 000003C6 | GREEK SMALL LETTER PHI + EE | 000003B5 | GREEK SMALL LETTER EPSILON + EF | 00002229 | INTERSECTION + F0 | 00002261 | IDENTICAL TO + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002265 | GREATER-THAN OR EQUAL TO + F3 | 00002264 | LESS-THAN OR EQUAL TO + F4 | 00002320 | TOP HALF INTEGRAL + F5 | 00002321 | BOTTOM HALF INTEGRAL + F6 | 000000F7 | DIVISION SIGN + F7 | 00002248 | ALMOST EQUAL TO + F8 | 000000B0 | DEGREE SIGN + F9 | 00002219 | BULLET OPERATOR + FA | 000000B7 | MIDDLE DOT + FB | 0000221A | SQUARE ROOT + FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM862.pm b/lib/Locale/RecodeData/IBM862.pm new file mode 100644 index 0000000..8f3d337 --- /dev/null +++ b/lib/Locale/RecodeData/IBM862.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM862. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM862; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 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, + 0x00a2, + 0x00a3, + 0x00a5, + 0x20a7, + 0x0192, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00f1, + 0x00d1, + 0x00aa, + 0x00ba, + 0x00bf, + 0x2310, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x2561, + 0x2562, + 0x2556, + 0x2555, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x255c, + 0x255b, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x255e, + 0x255f, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x2567, + 0x2568, + 0x2564, + 0x2565, + 0x2559, + 0x2558, + 0x2552, + 0x2553, + 0x256b, + 0x256a, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd7\x90", + "\xd7\x91", + "\xd7\x92", + "\xd7\x93", + "\xd7\x94", + "\xd7\x95", + "\xd7\x96", + "\xd7\x97", + "\xd7\x98", + "\xd7\x99", + "\xd7\x9a", + "\xd7\x9b", + "\xd7\x9c", + "\xd7\x9d", + "\xd7\x9e", + "\xd7\x9f", + "\xd7\xa0", + "\xd7\xa1", + "\xd7\xa2", + "\xd7\xa3", + "\xd7\xa4", + "\xd7\xa5", + "\xd7\xa6", + "\xd7\xa7", + "\xd7\xa8", + "\xd7\xa9", + "\xd7\xaa", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xe2\x82\xa7", + "\xc6\x92", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xb1", + "\xc3\x91", + "\xc2\xaa", + "\xc2\xba", + "\xc2\xbf", + "\xe2\x8c\x90", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xe2\x95\xa1", + "\xe2\x95\xa2", + "\xe2\x95\x96", + "\xe2\x95\x95", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xe2\x95\x9c", + "\xe2\x95\x9b", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa4", + "\xe2\x95\xa5", + "\xe2\x95\x99", + "\xe2\x95\x98", + "\xe2\x95\x92", + "\xe2\x95\x93", + "\xe2\x95\xab", + "\xe2\x95\xaa", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x80", + "\xce\xb1", + "\xc3\x9f", + "\xce\x93", + "\xcf\x80", + "\xce\xa3", + "\xcf\x83", + "\xc2\xb5", + "\xcf\x84", + "\xce\xa6", + "\xce\x98", + "\xce\xa9", + "\xce\xb4", + "\xe2\x88\x9e", + "\xcf\x86", + "\xce\xb5", + "\xe2\x88\xa9", + "\xe2\x89\xa1", + "\xc2\xb1", + "\xe2\x89\xa5", + "\xe2\x89\xa4", + "\xe2\x8c\xa0", + "\xe2\x8c\xa1", + "\xc3\xb7", + "\xe2\x89\x88", + "\xc2\xb0", + "\xe2\x88\x99", + "\xc2\xb7", + "\xe2\x88\x9a", + "\xe2\x81\xbf", + "\xc2\xb2", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a1 => "\xad", + 0x000000a2 => "\x9b", + 0x000000a3 => "\x9c", + 0x000000a5 => "\x9d", + 0x000000aa => "\xa6", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b5 => "\xe6", + 0x000000b7 => "\xfa", + 0x000000ba => "\xa7", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000bf => "\xa8", + 0x000000d1 => "\xa5", + 0x000000df => "\xe1", + 0x000000e1 => "\xa0", + 0x000000ed => "\xa1", + 0x000000f1 => "\xa4", + 0x000000f3 => "\xa2", + 0x000000f7 => "\xf6", + 0x000000fa => "\xa3", + 0x00000192 => "\x9f", + 0x00000393 => "\xe2", + 0x00000398 => "\xe9", + 0x000003a3 => "\xe4", + 0x000003a6 => "\xe8", + 0x000003a9 => "\xea", + 0x000003b1 => "\xe0", + 0x000003b4 => "\xeb", + 0x000003b5 => "\xee", + 0x000003c0 => "\xe3", + 0x000003c3 => "\xe5", + 0x000003c4 => "\xe7", + 0x000003c6 => "\xed", + 0x000005d0 => "\x80", + 0x000005d1 => "\x81", + 0x000005d2 => "\x82", + 0x000005d3 => "\x83", + 0x000005d4 => "\x84", + 0x000005d5 => "\x85", + 0x000005d6 => "\x86", + 0x000005d7 => "\x87", + 0x000005d8 => "\x88", + 0x000005d9 => "\x89", + 0x000005da => "\x8a", + 0x000005db => "\x8b", + 0x000005dc => "\x8c", + 0x000005dd => "\x8d", + 0x000005de => "\x8e", + 0x000005df => "\x8f", + 0x000005e0 => "\x90", + 0x000005e1 => "\x91", + 0x000005e2 => "\x92", + 0x000005e3 => "\x93", + 0x000005e4 => "\x94", + 0x000005e5 => "\x95", + 0x000005e6 => "\x96", + 0x000005e7 => "\x97", + 0x000005e8 => "\x98", + 0x000005e9 => "\x99", + 0x000005ea => "\x9a", + 0x0000207f => "\xfc", + 0x000020a7 => "\x9e", + 0x00002219 => "\xf9", + 0x0000221a => "\xfb", + 0x0000221e => "\xec", + 0x00002229 => "\xef", + 0x00002248 => "\xf7", + 0x00002261 => "\xf0", + 0x00002264 => "\xf3", + 0x00002265 => "\xf2", + 0x00002310 => "\xa9", + 0x00002320 => "\xf4", + 0x00002321 => "\xf5", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002552 => "\xd5", + 0x00002553 => "\xd6", + 0x00002554 => "\xc9", + 0x00002555 => "\xb8", + 0x00002556 => "\xb7", + 0x00002557 => "\xbb", + 0x00002558 => "\xd4", + 0x00002559 => "\xd3", + 0x0000255a => "\xc8", + 0x0000255b => "\xbe", + 0x0000255c => "\xbd", + 0x0000255d => "\xbc", + 0x0000255e => "\xc6", + 0x0000255f => "\xc7", + 0x00002560 => "\xcc", + 0x00002561 => "\xb5", + 0x00002562 => "\xb6", + 0x00002563 => "\xb9", + 0x00002564 => "\xd1", + 0x00002565 => "\xd2", + 0x00002566 => "\xcb", + 0x00002567 => "\xcf", + 0x00002568 => "\xd0", + 0x00002569 => "\xca", + 0x0000256a => "\xd8", + 0x0000256b => "\xd7", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x0000258c => "\xdd", + 0x00002590 => "\xde", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM862 - Conversion routines for IBM862 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM862. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP862 + alias 862 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000005D0 | HEBREW LETTER ALEF + 81 | 000005D1 | HEBREW LETTER BET + 82 | 000005D2 | HEBREW LETTER GIMEL + 83 | 000005D3 | HEBREW LETTER DALET + 84 | 000005D4 | HEBREW LETTER HE + 85 | 000005D5 | HEBREW LETTER VAV + 86 | 000005D6 | HEBREW LETTER ZAYIN + 87 | 000005D7 | HEBREW LETTER HET + 88 | 000005D8 | HEBREW LETTER TET + 89 | 000005D9 | HEBREW LETTER YOD + 8A | 000005DA | HEBREW LETTER FINAL KAF + 8B | 000005DB | HEBREW LETTER KAF + 8C | 000005DC | HEBREW LETTER LAMED + 8D | 000005DD | HEBREW LETTER FINAL MEM + 8E | 000005DE | HEBREW LETTER MEM + 8F | 000005DF | HEBREW LETTER FINAL NUN + 90 | 000005E0 | HEBREW LETTER NUN + 91 | 000005E1 | HEBREW LETTER SAMEKH + 92 | 000005E2 | HEBREW LETTER AYIN + 93 | 000005E3 | HEBREW LETTER FINAL PE + 94 | 000005E4 | HEBREW LETTER PE + 95 | 000005E5 | HEBREW LETTER FINAL TSADI + 96 | 000005E6 | HEBREW LETTER TSADI + 97 | 000005E7 | HEBREW LETTER QOF + 98 | 000005E8 | HEBREW LETTER RESH + 99 | 000005E9 | HEBREW LETTER SHIN + 9A | 000005EA | HEBREW LETTER TAV + 9B | 000000A2 | CENT SIGN + 9C | 000000A3 | POUND SIGN + 9D | 000000A5 | YEN SIGN + 9E | 000020A7 | PESETA SIGN + 9F | 00000192 | LATIN SMALL LETTER F WITH HOOK + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + A6 | 000000AA | FEMININE ORDINAL INDICATOR + A7 | 000000BA | MASCULINE ORDINAL INDICATOR + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 00002310 | REVERSED NOT SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 0000258C | LEFT HALF BLOCK + DE | 00002590 | RIGHT HALF BLOCK + DF | 00002580 | UPPER HALF BLOCK + E0 | 000003B1 | GREEK SMALL LETTER ALPHA + E1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + E2 | 00000393 | GREEK CAPITAL LETTER GAMMA + E3 | 000003C0 | GREEK SMALL LETTER PI + E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA + E5 | 000003C3 | GREEK SMALL LETTER SIGMA + E6 | 000000B5 | MICRO SIGN + E7 | 000003C4 | GREEK SMALL LETTER TAU + E8 | 000003A6 | GREEK CAPITAL LETTER PHI + E9 | 00000398 | GREEK CAPITAL LETTER THETA + EA | 000003A9 | GREEK CAPITAL LETTER OMEGA + EB | 000003B4 | GREEK SMALL LETTER DELTA + EC | 0000221E | INFINITY + ED | 000003C6 | GREEK SMALL LETTER PHI + EE | 000003B5 | GREEK SMALL LETTER EPSILON + EF | 00002229 | INTERSECTION + F0 | 00002261 | IDENTICAL TO + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002265 | GREATER-THAN OR EQUAL TO + F3 | 00002264 | LESS-THAN OR EQUAL TO + F4 | 00002320 | TOP HALF INTEGRAL + F5 | 00002321 | BOTTOM HALF INTEGRAL + F6 | 000000F7 | DIVISION SIGN + F7 | 00002248 | ALMOST EQUAL TO + F8 | 000000B0 | DEGREE SIGN + F9 | 00002219 | BULLET OPERATOR + FA | 000000B7 | MIDDLE DOT + FB | 0000221A | SQUARE ROOT + FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM863.pm b/lib/Locale/RecodeData/IBM863.pm new file mode 100644 index 0000000..6e978b8 --- /dev/null +++ b/lib/Locale/RecodeData/IBM863.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM863. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM863; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00c2, + 0x00e0, + 0x00b6, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ef, + 0x00ee, + 0x2017, + 0x00c0, + 0x00a7, + 0x00c9, + 0x00c8, + 0x00ca, + 0x00f4, + 0x00cb, + 0x00cf, + 0x00fb, + 0x00f9, + 0x00a4, + 0x00d4, + 0x00dc, + 0x00a2, + 0x00a3, + 0x00d9, + 0x00db, + 0x0192, + 0x00a6, + 0x00b4, + 0x00f3, + 0x00fa, + 0x00a8, + 0x00b8, + 0x00b3, + 0x00af, + 0x00ce, + 0x2310, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00be, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x2561, + 0x2562, + 0x2556, + 0x2555, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x255c, + 0x255b, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x255e, + 0x255f, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x2567, + 0x2568, + 0x2564, + 0x2565, + 0x2559, + 0x2558, + 0x2552, + 0x2553, + 0x256b, + 0x256a, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\x82", + "\xc3\xa0", + "\xc2\xb6", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xaf", + "\xc3\xae", + "\xe2\x80\x97", + "\xc3\x80", + "\xc2\xa7", + "\xc3\x89", + "\xc3\x88", + "\xc3\x8a", + "\xc3\xb4", + "\xc3\x8b", + "\xc3\x8f", + "\xc3\xbb", + "\xc3\xb9", + "\xc2\xa4", + "\xc3\x94", + "\xc3\x9c", + "\xc2\xa2", + "\xc2\xa3", + "\xc3\x99", + "\xc3\x9b", + "\xc6\x92", + "\xc2\xa6", + "\xc2\xb4", + "\xc3\xb3", + "\xc3\xba", + "\xc2\xa8", + "\xc2\xb8", + "\xc2\xb3", + "\xc2\xaf", + "\xc3\x8e", + "\xe2\x8c\x90", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xbe", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xe2\x95\xa1", + "\xe2\x95\xa2", + "\xe2\x95\x96", + "\xe2\x95\x95", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xe2\x95\x9c", + "\xe2\x95\x9b", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa4", + "\xe2\x95\xa5", + "\xe2\x95\x99", + "\xe2\x95\x98", + "\xe2\x95\x92", + "\xe2\x95\x93", + "\xe2\x95\xab", + "\xe2\x95\xaa", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x80", + "\xce\xb1", + "\xc3\x9f", + "\xce\x93", + "\xcf\x80", + "\xce\xa3", + "\xcf\x83", + "\xc2\xb5", + "\xcf\x84", + "\xce\xa6", + "\xce\x98", + "\xce\xa9", + "\xce\xb4", + "\xe2\x88\x9e", + "\xcf\x86", + "\xce\xb5", + "\xe2\x88\xa9", + "\xe2\x89\xa1", + "\xc2\xb1", + "\xe2\x89\xa5", + "\xe2\x89\xa4", + "\xe2\x8c\xa0", + "\xe2\x8c\xa1", + "\xc3\xb7", + "\xe2\x89\x88", + "\xc2\xb0", + "\xe2\x88\x99", + "\xc2\xb7", + "\xe2\x88\x9a", + "\xe2\x81\xbf", + "\xc2\xb2", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a2 => "\x9b", + 0x000000a3 => "\x9c", + 0x000000a4 => "\x98", + 0x000000a6 => "\xa0", + 0x000000a7 => "\x8f", + 0x000000a8 => "\xa4", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000af => "\xa7", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b3 => "\xa6", + 0x000000b4 => "\xa1", + 0x000000b5 => "\xe6", + 0x000000b6 => "\x86", + 0x000000b7 => "\xfa", + 0x000000b8 => "\xa5", + 0x000000bb => "\xaf", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000be => "\xad", + 0x000000c0 => "\x8e", + 0x000000c2 => "\x84", + 0x000000c7 => "\x80", + 0x000000c8 => "\x91", + 0x000000c9 => "\x90", + 0x000000ca => "\x92", + 0x000000cb => "\x94", + 0x000000ce => "\xa8", + 0x000000cf => "\x95", + 0x000000d4 => "\x99", + 0x000000d9 => "\x9d", + 0x000000db => "\x9e", + 0x000000dc => "\x9a", + 0x000000df => "\xe1", + 0x000000e0 => "\x85", + 0x000000e2 => "\x83", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ee => "\x8c", + 0x000000ef => "\x8b", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f7 => "\xf6", + 0x000000f9 => "\x97", + 0x000000fa => "\xa3", + 0x000000fb => "\x96", + 0x000000fc => "\x81", + 0x00000192 => "\x9f", + 0x00000393 => "\xe2", + 0x00000398 => "\xe9", + 0x000003a3 => "\xe4", + 0x000003a6 => "\xe8", + 0x000003a9 => "\xea", + 0x000003b1 => "\xe0", + 0x000003b4 => "\xeb", + 0x000003b5 => "\xee", + 0x000003c0 => "\xe3", + 0x000003c3 => "\xe5", + 0x000003c4 => "\xe7", + 0x000003c6 => "\xed", + 0x00002017 => "\x8d", + 0x0000207f => "\xfc", + 0x00002219 => "\xf9", + 0x0000221a => "\xfb", + 0x0000221e => "\xec", + 0x00002229 => "\xef", + 0x00002248 => "\xf7", + 0x00002261 => "\xf0", + 0x00002264 => "\xf3", + 0x00002265 => "\xf2", + 0x00002310 => "\xa9", + 0x00002320 => "\xf4", + 0x00002321 => "\xf5", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002552 => "\xd5", + 0x00002553 => "\xd6", + 0x00002554 => "\xc9", + 0x00002555 => "\xb8", + 0x00002556 => "\xb7", + 0x00002557 => "\xbb", + 0x00002558 => "\xd4", + 0x00002559 => "\xd3", + 0x0000255a => "\xc8", + 0x0000255b => "\xbe", + 0x0000255c => "\xbd", + 0x0000255d => "\xbc", + 0x0000255e => "\xc6", + 0x0000255f => "\xc7", + 0x00002560 => "\xcc", + 0x00002561 => "\xb5", + 0x00002562 => "\xb6", + 0x00002563 => "\xb9", + 0x00002564 => "\xd1", + 0x00002565 => "\xd2", + 0x00002566 => "\xcb", + 0x00002567 => "\xcf", + 0x00002568 => "\xd0", + 0x00002569 => "\xca", + 0x0000256a => "\xd8", + 0x0000256b => "\xd7", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x0000258c => "\xdd", + 0x00002590 => "\xde", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM863 - Conversion routines for IBM863 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM863. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM Keyboard layouts and code pages, PN 07G4586 June 1991 + alias CP863 + alias 863 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000B6 | PILCROW SIGN + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 00002017 | DOUBLE LOW LINE + 8E | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 8F | 000000A7 | SECTION SIGN + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 92 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 95 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 98 | 000000A4 | CURRENCY SIGN + 99 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000A2 | CENT SIGN + 9C | 000000A3 | POUND SIGN + 9D | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + 9E | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 9F | 00000192 | LATIN SMALL LETTER F WITH HOOK + A0 | 000000A6 | BROKEN BAR + A1 | 000000B4 | ACUTE ACCENT + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000A8 | DIAERESIS + A5 | 000000B8 | CEDILLA + A6 | 000000B3 | SUPERSCRIPT THREE + A7 | 000000AF | MACRON + A8 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + A9 | 00002310 | REVERSED NOT SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000BE | VULGAR FRACTION THREE QUARTERS + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 0000258C | LEFT HALF BLOCK + DE | 00002590 | RIGHT HALF BLOCK + DF | 00002580 | UPPER HALF BLOCK + E0 | 000003B1 | GREEK SMALL LETTER ALPHA + E1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + E2 | 00000393 | GREEK CAPITAL LETTER GAMMA + E3 | 000003C0 | GREEK SMALL LETTER PI + E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA + E5 | 000003C3 | GREEK SMALL LETTER SIGMA + E6 | 000000B5 | MICRO SIGN + E7 | 000003C4 | GREEK SMALL LETTER TAU + E8 | 000003A6 | GREEK CAPITAL LETTER PHI + E9 | 00000398 | GREEK CAPITAL LETTER THETA + EA | 000003A9 | GREEK CAPITAL LETTER OMEGA + EB | 000003B4 | GREEK SMALL LETTER DELTA + EC | 0000221E | INFINITY + ED | 000003C6 | GREEK SMALL LETTER PHI + EE | 000003B5 | GREEK SMALL LETTER EPSILON + EF | 00002229 | INTERSECTION + F0 | 00002261 | IDENTICAL TO + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002265 | GREATER-THAN OR EQUAL TO + F3 | 00002264 | LESS-THAN OR EQUAL TO + F4 | 00002320 | TOP HALF INTEGRAL + F5 | 00002321 | BOTTOM HALF INTEGRAL + F6 | 000000F7 | DIVISION SIGN + F7 | 00002248 | ALMOST EQUAL TO + F8 | 000000B0 | DEGREE SIGN + F9 | 00002219 | BULLET OPERATOR + FA | 000000B7 | MIDDLE DOT + FB | 0000221A | SQUARE ROOT + FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM864.pm b/lib/Locale/RecodeData/IBM864.pm new file mode 100644 index 0000000..bb0f2d2 --- /dev/null +++ b/lib/Locale/RecodeData/IBM864.pm @@ -0,0 +1,1127 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM864. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM864; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x066a, + 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, + 0x00b0, + 0x00b7, + 0x2219, + 0x221a, + 0x2592, + 0x2500, + 0x2502, + 0x253c, + 0x2524, + 0x252c, + 0x251c, + 0x2534, + 0x2510, + 0x250c, + 0x2514, + 0x2518, + 0x03b2, + 0x221e, + 0x03c6, + 0x00b1, + 0x00bd, + 0x00bc, + 0x2248, + 0x00ab, + 0x00bb, + 0xfef7, + 0xfef8, + 0xfffd, + 0xfffd, + 0xfefb, + 0xfefc, + 0xfffd, + 0x00a0, + 0x00ad, + 0xfe82, + 0x00a3, + 0x00a4, + 0xfe84, + 0xfffd, + 0xfffd, + 0xfe8e, + 0xfe8f, + 0xfe95, + 0xfe99, + 0x060c, + 0xfe9d, + 0xfea1, + 0xfea5, + 0x0660, + 0x0661, + 0x0662, + 0x0663, + 0x0664, + 0x0665, + 0x0666, + 0x0667, + 0x0668, + 0x0669, + 0xfed1, + 0x061b, + 0xfeb1, + 0xfeb5, + 0xfeb9, + 0x061f, + 0x00a2, + 0xfe80, + 0xfe81, + 0xfe83, + 0xfe85, + 0xfeca, + 0xfe8b, + 0xfe8d, + 0xfe91, + 0xfe93, + 0xfe97, + 0xfe9b, + 0xfe9f, + 0xfea3, + 0xfea7, + 0xfea9, + 0xfeab, + 0xfead, + 0xfeaf, + 0xfeb3, + 0xfeb7, + 0xfebb, + 0xfebf, + 0xfec1, + 0xfec5, + 0xfecb, + 0xfecf, + 0x00a6, + 0x00ac, + 0x00f7, + 0x00d7, + 0xfec9, + 0x0640, + 0xfed3, + 0xfed7, + 0xfedb, + 0xfedf, + 0xfee3, + 0xfee7, + 0xfeeb, + 0xfeed, + 0xfeef, + 0xfef3, + 0xfebd, + 0xfecc, + 0xfece, + 0xfecd, + 0xfee1, + 0xfe7d, + 0x0651, + 0xfee5, + 0xfee9, + 0xfeec, + 0xfef0, + 0xfef2, + 0xfed0, + 0xfed5, + 0xfef5, + 0xfef6, + 0xfedd, + 0xfed9, + 0xfef1, + 0x25a0, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\xd9\xaa", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\xb0", + "\xc2\xb7", + "\xe2\x88\x99", + "\xe2\x88\x9a", + "\xe2\x96\x92", + "\xe2\x94\x80", + "\xe2\x94\x82", + "\xe2\x94\xbc", + "\xe2\x94\xa4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\xb4", + "\xe2\x94\x90", + "\xe2\x94\x8c", + "\xe2\x94\x94", + "\xe2\x94\x98", + "\xce\xb2", + "\xe2\x88\x9e", + "\xcf\x86", + "\xc2\xb1", + "\xc2\xbd", + "\xc2\xbc", + "\xe2\x89\x88", + "\xc2\xab", + "\xc2\xbb", + "\xef\xbb\xb7", + "\xef\xbb\xb8", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbb\xbb", + "\xef\xbb\xbc", + "\xef\xbf\xbd", + "\xc2\xa0", + "\xc2\xad", + "\xef\xba\x82", + "\xc2\xa3", + "\xc2\xa4", + "\xef\xba\x84", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xba\x8e", + "\xef\xba\x8f", + "\xef\xba\x95", + "\xef\xba\x99", + "\xd8\x8c", + "\xef\xba\x9d", + "\xef\xba\xa1", + "\xef\xba\xa5", + "\xd9\xa0", + "\xd9\xa1", + "\xd9\xa2", + "\xd9\xa3", + "\xd9\xa4", + "\xd9\xa5", + "\xd9\xa6", + "\xd9\xa7", + "\xd9\xa8", + "\xd9\xa9", + "\xef\xbb\x91", + "\xd8\x9b", + "\xef\xba\xb1", + "\xef\xba\xb5", + "\xef\xba\xb9", + "\xd8\x9f", + "\xc2\xa2", + "\xef\xba\x80", + "\xef\xba\x81", + "\xef\xba\x83", + "\xef\xba\x85", + "\xef\xbb\x8a", + "\xef\xba\x8b", + "\xef\xba\x8d", + "\xef\xba\x91", + "\xef\xba\x93", + "\xef\xba\x97", + "\xef\xba\x9b", + "\xef\xba\x9f", + "\xef\xba\xa3", + "\xef\xba\xa7", + "\xef\xba\xa9", + "\xef\xba\xab", + "\xef\xba\xad", + "\xef\xba\xaf", + "\xef\xba\xb3", + "\xef\xba\xb7", + "\xef\xba\xbb", + "\xef\xba\xbf", + "\xef\xbb\x81", + "\xef\xbb\x85", + "\xef\xbb\x8b", + "\xef\xbb\x8f", + "\xc2\xa6", + "\xc2\xac", + "\xc3\xb7", + "\xc3\x97", + "\xef\xbb\x89", + "\xd9\x80", + "\xef\xbb\x93", + "\xef\xbb\x97", + "\xef\xbb\x9b", + "\xef\xbb\x9f", + "\xef\xbb\xa3", + "\xef\xbb\xa7", + "\xef\xbb\xab", + "\xef\xbb\xad", + "\xef\xbb\xaf", + "\xef\xbb\xb3", + "\xef\xba\xbd", + "\xef\xbb\x8c", + "\xef\xbb\x8e", + "\xef\xbb\x8d", + "\xef\xbb\xa1", + "\xef\xb9\xbd", + "\xd9\x91", + "\xef\xbb\xa5", + "\xef\xbb\xa9", + "\xef\xbb\xac", + "\xef\xbb\xb0", + "\xef\xbb\xb2", + "\xef\xbb\x90", + "\xef\xbb\x95", + "\xef\xbb\xb5", + "\xef\xbb\xb6", + "\xef\xbb\x9d", + "\xef\xbb\x99", + "\xef\xbb\xb1", + "\xe2\x96\xa0", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a2 => "\xc0", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a6 => "\xdb", + 0x000000ab => "\x97", + 0x000000ac => "\xdc", + 0x000000ad => "\xa1", + 0x000000b0 => "\x80", + 0x000000b1 => "\x93", + 0x000000b7 => "\x81", + 0x000000bb => "\x98", + 0x000000bc => "\x95", + 0x000000bd => "\x94", + 0x000000d7 => "\xde", + 0x000000f7 => "\xdd", + 0x000003b2 => "\x90", + 0x000003c6 => "\x92", + 0x0000060c => "\xac", + 0x0000061b => "\xbb", + 0x0000061f => "\xbf", + 0x00000640 => "\xe0", + 0x00000651 => "\xf1", + 0x00000660 => "\xb0", + 0x00000661 => "\xb1", + 0x00000662 => "\xb2", + 0x00000663 => "\xb3", + 0x00000664 => "\xb4", + 0x00000665 => "\xb5", + 0x00000666 => "\xb6", + 0x00000667 => "\xb7", + 0x00000668 => "\xb8", + 0x00000669 => "\xb9", + 0x0000066a => "\x25", + 0x00002219 => "\x82", + 0x0000221a => "\x83", + 0x0000221e => "\x91", + 0x00002248 => "\x96", + 0x00002500 => "\x85", + 0x00002502 => "\x86", + 0x0000250c => "\x8d", + 0x00002510 => "\x8c", + 0x00002514 => "\x8e", + 0x00002518 => "\x8f", + 0x0000251c => "\x8a", + 0x00002524 => "\x88", + 0x0000252c => "\x89", + 0x00002534 => "\x8b", + 0x0000253c => "\x87", + 0x00002592 => "\x84", + 0x000025a0 => "\xfe", + 0x0000fe7d => "\xf0", + 0x0000fe80 => "\xc1", + 0x0000fe81 => "\xc2", + 0x0000fe82 => "\xa2", + 0x0000fe83 => "\xc3", + 0x0000fe84 => "\xa5", + 0x0000fe85 => "\xc4", + 0x0000fe8b => "\xc6", + 0x0000fe8d => "\xc7", + 0x0000fe8e => "\xa8", + 0x0000fe8f => "\xa9", + 0x0000fe91 => "\xc8", + 0x0000fe93 => "\xc9", + 0x0000fe95 => "\xaa", + 0x0000fe97 => "\xca", + 0x0000fe99 => "\xab", + 0x0000fe9b => "\xcb", + 0x0000fe9d => "\xad", + 0x0000fe9f => "\xcc", + 0x0000fea1 => "\xae", + 0x0000fea3 => "\xcd", + 0x0000fea5 => "\xaf", + 0x0000fea7 => "\xce", + 0x0000fea9 => "\xcf", + 0x0000feab => "\xd0", + 0x0000fead => "\xd1", + 0x0000feaf => "\xd2", + 0x0000feb1 => "\xbc", + 0x0000feb3 => "\xd3", + 0x0000feb5 => "\xbd", + 0x0000feb7 => "\xd4", + 0x0000feb9 => "\xbe", + 0x0000febb => "\xd5", + 0x0000febd => "\xeb", + 0x0000febf => "\xd6", + 0x0000fec1 => "\xd7", + 0x0000fec5 => "\xd8", + 0x0000fec9 => "\xdf", + 0x0000feca => "\xc5", + 0x0000fecb => "\xd9", + 0x0000fecc => "\xec", + 0x0000fecd => "\xee", + 0x0000fece => "\xed", + 0x0000fecf => "\xda", + 0x0000fed0 => "\xf7", + 0x0000fed1 => "\xba", + 0x0000fed3 => "\xe1", + 0x0000fed5 => "\xf8", + 0x0000fed7 => "\xe2", + 0x0000fed9 => "\xfc", + 0x0000fedb => "\xe3", + 0x0000fedd => "\xfb", + 0x0000fedf => "\xe4", + 0x0000fee1 => "\xef", + 0x0000fee3 => "\xe5", + 0x0000fee5 => "\xf2", + 0x0000fee7 => "\xe6", + 0x0000fee9 => "\xf3", + 0x0000feeb => "\xe7", + 0x0000feec => "\xf4", + 0x0000feed => "\xe8", + 0x0000feef => "\xe9", + 0x0000fef0 => "\xf5", + 0x0000fef1 => "\xfd", + 0x0000fef2 => "\xf6", + 0x0000fef3 => "\xea", + 0x0000fef5 => "\xf9", + 0x0000fef6 => "\xfa", + 0x0000fef7 => "\x99", + 0x0000fef8 => "\x9a", + 0x0000fefb => "\x9d", + 0x0000fefc => "\x9e", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM864 - Conversion routines for IBM864 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM864. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + automatically generated from the charDB + alias CP864 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 0000066A | ARABIC PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 000000B0 | DEGREE SIGN + 81 | 000000B7 | MIDDLE DOT + 82 | 00002219 | BULLET OPERATOR + 83 | 0000221A | SQUARE ROOT + 84 | 00002592 | MEDIUM SHADE + 85 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + 86 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + 87 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 88 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + 89 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 8A | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 8B | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + 8C | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + 8D | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + 8E | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + 8F | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + 90 | 000003B2 | GREEK SMALL LETTER BETA + 91 | 0000221E | INFINITY + 92 | 000003C6 | GREEK SMALL LETTER PHI + 93 | 000000B1 | PLUS-MINUS SIGN + 94 | 000000BD | VULGAR FRACTION ONE HALF + 95 | 000000BC | VULGAR FRACTION ONE QUARTER + 96 | 00002248 | ALMOST EQUAL TO + 97 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 98 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 99 | 0000FEF7 | ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + 9A | 0000FEF8 | ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + 9D | 0000FEFB | ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + 9E | 0000FEFC | ARABIC LIGATURE LAM WITH ALEF FINAL FORM + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000AD | SOFT HYPHEN + A2 | 0000FE82 | ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 0000FE84 | ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM + A8 | 0000FE8E | ARABIC LETTER ALEF FINAL FORM + A9 | 0000FE8F | ARABIC LETTER BEH ISOLATED FORM + AA | 0000FE95 | ARABIC LETTER TEH ISOLATED FORM + AB | 0000FE99 | ARABIC LETTER THEH ISOLATED FORM + AC | 0000060C | ARABIC COMMA + AD | 0000FE9D | ARABIC LETTER JEEM ISOLATED FORM + AE | 0000FEA1 | ARABIC LETTER HAH ISOLATED FORM + AF | 0000FEA5 | ARABIC LETTER KHAH ISOLATED FORM + B0 | 00000660 | ARABIC-INDIC DIGIT ZERO + B1 | 00000661 | ARABIC-INDIC DIGIT ONE + B2 | 00000662 | ARABIC-INDIC DIGIT TWO + B3 | 00000663 | ARABIC-INDIC DIGIT THREE + B4 | 00000664 | ARABIC-INDIC DIGIT FOUR + B5 | 00000665 | ARABIC-INDIC DIGIT FIVE + B6 | 00000666 | ARABIC-INDIC DIGIT SIX + B7 | 00000667 | ARABIC-INDIC DIGIT SEVEN + B8 | 00000668 | ARABIC-INDIC DIGIT EIGHT + B9 | 00000669 | ARABIC-INDIC DIGIT NINE + BA | 0000FED1 | ARABIC LETTER FEH ISOLATED FORM + BB | 0000061B | ARABIC SEMICOLON + BC | 0000FEB1 | ARABIC LETTER SEEN ISOLATED FORM + BD | 0000FEB5 | ARABIC LETTER SHEEN ISOLATED FORM + BE | 0000FEB9 | ARABIC LETTER SAD ISOLATED FORM + BF | 0000061F | ARABIC QUESTION MARK + C0 | 000000A2 | CENT SIGN + C1 | 0000FE80 | ARABIC LETTER HAMZA ISOLATED FORM + C2 | 0000FE81 | ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM + C3 | 0000FE83 | ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM + C4 | 0000FE85 | ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM + C5 | 0000FECA | ARABIC LETTER AIN FINAL FORM + C6 | 0000FE8B | ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM + C7 | 0000FE8D | ARABIC LETTER ALEF ISOLATED FORM + C8 | 0000FE91 | ARABIC LETTER BEH INITIAL FORM + C9 | 0000FE93 | ARABIC LETTER TEH MARBUTA ISOLATED FORM + CA | 0000FE97 | ARABIC LETTER TEH INITIAL FORM + CB | 0000FE9B | ARABIC LETTER THEH INITIAL FORM + CC | 0000FE9F | ARABIC LETTER JEEM INITIAL FORM + CD | 0000FEA3 | ARABIC LETTER HAH INITIAL FORM + CE | 0000FEA7 | ARABIC LETTER KHAH INITIAL FORM + CF | 0000FEA9 | ARABIC LETTER DAL ISOLATED FORM + D0 | 0000FEAB | ARABIC LETTER THAL ISOLATED FORM + D1 | 0000FEAD | ARABIC LETTER REH ISOLATED FORM + D2 | 0000FEAF | ARABIC LETTER ZAIN ISOLATED FORM + D3 | 0000FEB3 | ARABIC LETTER SEEN INITIAL FORM + D4 | 0000FEB7 | ARABIC LETTER SHEEN INITIAL FORM + D5 | 0000FEBB | ARABIC LETTER SAD INITIAL FORM + D6 | 0000FEBF | ARABIC LETTER DAD INITIAL FORM + D7 | 0000FEC1 | ARABIC LETTER TAH ISOLATED FORM + D8 | 0000FEC5 | ARABIC LETTER ZAH ISOLATED FORM + D9 | 0000FECB | ARABIC LETTER AIN INITIAL FORM + DA | 0000FECF | ARABIC LETTER GHAIN INITIAL FORM + DB | 000000A6 | BROKEN BAR + DC | 000000AC | NOT SIGN + DD | 000000F7 | DIVISION SIGN + DE | 000000D7 | MULTIPLICATION SIGN + DF | 0000FEC9 | ARABIC LETTER AIN ISOLATED FORM + E0 | 00000640 | ARABIC TATWEEL + E1 | 0000FED3 | ARABIC LETTER FEH INITIAL FORM + E2 | 0000FED7 | ARABIC LETTER QAF INITIAL FORM + E3 | 0000FEDB | ARABIC LETTER KAF INITIAL FORM + E4 | 0000FEDF | ARABIC LETTER LAM INITIAL FORM + E5 | 0000FEE3 | ARABIC LETTER MEEM INITIAL FORM + E6 | 0000FEE7 | ARABIC LETTER NOON INITIAL FORM + E7 | 0000FEEB | ARABIC LETTER HEH INITIAL FORM + E8 | 0000FEED | ARABIC LETTER WAW ISOLATED FORM + E9 | 0000FEEF | ARABIC LETTER ALEF MAKSURA ISOLATED FORM + EA | 0000FEF3 | ARABIC LETTER YEH INITIAL FORM + EB | 0000FEBD | ARABIC LETTER DAD ISOLATED FORM + EC | 0000FECC | ARABIC LETTER AIN MEDIAL FORM + ED | 0000FECE | ARABIC LETTER GHAIN FINAL FORM + EE | 0000FECD | ARABIC LETTER GHAIN ISOLATED FORM + EF | 0000FEE1 | ARABIC LETTER MEEM ISOLATED FORM + F0 | 0000FE7D | ARABIC SHADDA MEDIAL FORM + F1 | 00000651 | ARABIC SHADDA + F2 | 0000FEE5 | ARABIC LETTER NOON ISOLATED FORM + F3 | 0000FEE9 | ARABIC LETTER HEH ISOLATED FORM + F4 | 0000FEEC | ARABIC LETTER HEH MEDIAL FORM + F5 | 0000FEF0 | ARABIC LETTER ALEF MAKSURA FINAL FORM + F6 | 0000FEF2 | ARABIC LETTER YEH FINAL FORM + F7 | 0000FED0 | ARABIC LETTER GHAIN MEDIAL FORM + F8 | 0000FED5 | ARABIC LETTER QAF ISOLATED FORM + F9 | 0000FEF5 | ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + FA | 0000FEF6 | ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + FB | 0000FEDD | ARABIC LETTER LAM ISOLATED FORM + FC | 0000FED9 | ARABIC LETTER KAF ISOLATED FORM + FD | 0000FEF1 | ARABIC LETTER YEH ISOLATED FORM + FE | 000025A0 | BLACK SQUARE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM865.pm b/lib/Locale/RecodeData/IBM865.pm new file mode 100644 index 0000000..cc0f506 --- /dev/null +++ b/lib/Locale/RecodeData/IBM865.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM865. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM865; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c7, + 0x00fc, + 0x00e9, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e5, + 0x00e7, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ef, + 0x00ee, + 0x00ec, + 0x00c4, + 0x00c5, + 0x00c9, + 0x00e6, + 0x00c6, + 0x00f4, + 0x00f6, + 0x00f2, + 0x00fb, + 0x00f9, + 0x00ff, + 0x00d6, + 0x00dc, + 0x00f8, + 0x00a3, + 0x00d8, + 0x20a7, + 0x0192, + 0x00e1, + 0x00ed, + 0x00f3, + 0x00fa, + 0x00f1, + 0x00d1, + 0x00aa, + 0x00ba, + 0x00bf, + 0x2310, + 0x00ac, + 0x00bd, + 0x00bc, + 0x00a1, + 0x00ab, + 0x00a4, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x2561, + 0x2562, + 0x2556, + 0x2555, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x255c, + 0x255b, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x255e, + 0x255f, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x2567, + 0x2568, + 0x2564, + 0x2565, + 0x2559, + 0x2558, + 0x2552, + 0x2553, + 0x256b, + 0x256a, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x87", + "\xc3\xbc", + "\xc3\xa9", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xaf", + "\xc3\xae", + "\xc3\xac", + "\xc3\x84", + "\xc3\x85", + "\xc3\x89", + "\xc3\xa6", + "\xc3\x86", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb2", + "\xc3\xbb", + "\xc3\xb9", + "\xc3\xbf", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xb8", + "\xc2\xa3", + "\xc3\x98", + "\xe2\x82\xa7", + "\xc6\x92", + "\xc3\xa1", + "\xc3\xad", + "\xc3\xb3", + "\xc3\xba", + "\xc3\xb1", + "\xc3\x91", + "\xc2\xaa", + "\xc2\xba", + "\xc2\xbf", + "\xe2\x8c\x90", + "\xc2\xac", + "\xc2\xbd", + "\xc2\xbc", + "\xc2\xa1", + "\xc2\xab", + "\xc2\xa4", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xe2\x95\xa1", + "\xe2\x95\xa2", + "\xe2\x95\x96", + "\xe2\x95\x95", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xe2\x95\x9c", + "\xe2\x95\x9b", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa4", + "\xe2\x95\xa5", + "\xe2\x95\x99", + "\xe2\x95\x98", + "\xe2\x95\x92", + "\xe2\x95\x93", + "\xe2\x95\xab", + "\xe2\x95\xaa", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x80", + "\xce\xb1", + "\xc3\x9f", + "\xce\x93", + "\xcf\x80", + "\xce\xa3", + "\xcf\x83", + "\xc2\xb5", + "\xcf\x84", + "\xce\xa6", + "\xce\x98", + "\xce\xa9", + "\xce\xb4", + "\xe2\x88\x9e", + "\xcf\x86", + "\xce\xb5", + "\xe2\x88\xa9", + "\xe2\x89\xa1", + "\xc2\xb1", + "\xe2\x89\xa5", + "\xe2\x89\xa4", + "\xe2\x8c\xa0", + "\xe2\x8c\xa1", + "\xc3\xb7", + "\xe2\x89\x88", + "\xc2\xb0", + "\xe2\x88\x99", + "\xc2\xb7", + "\xe2\x88\x9a", + "\xe2\x81\xbf", + "\xc2\xb2", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a1 => "\xad", + 0x000000a3 => "\x9c", + 0x000000a4 => "\xaf", + 0x000000aa => "\xa6", + 0x000000ab => "\xae", + 0x000000ac => "\xaa", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\xfd", + 0x000000b5 => "\xe6", + 0x000000b7 => "\xfa", + 0x000000ba => "\xa7", + 0x000000bc => "\xac", + 0x000000bd => "\xab", + 0x000000bf => "\xa8", + 0x000000c4 => "\x8e", + 0x000000c5 => "\x8f", + 0x000000c6 => "\x92", + 0x000000c7 => "\x80", + 0x000000c9 => "\x90", + 0x000000d1 => "\xa5", + 0x000000d6 => "\x99", + 0x000000d8 => "\x9d", + 0x000000dc => "\x9a", + 0x000000df => "\xe1", + 0x000000e0 => "\x85", + 0x000000e1 => "\xa0", + 0x000000e2 => "\x83", + 0x000000e4 => "\x84", + 0x000000e5 => "\x86", + 0x000000e6 => "\x91", + 0x000000e7 => "\x87", + 0x000000e8 => "\x8a", + 0x000000e9 => "\x82", + 0x000000ea => "\x88", + 0x000000eb => "\x89", + 0x000000ec => "\x8d", + 0x000000ed => "\xa1", + 0x000000ee => "\x8c", + 0x000000ef => "\x8b", + 0x000000f1 => "\xa4", + 0x000000f2 => "\x95", + 0x000000f3 => "\xa2", + 0x000000f4 => "\x93", + 0x000000f6 => "\x94", + 0x000000f7 => "\xf6", + 0x000000f8 => "\x9b", + 0x000000f9 => "\x97", + 0x000000fa => "\xa3", + 0x000000fb => "\x96", + 0x000000fc => "\x81", + 0x000000ff => "\x98", + 0x00000192 => "\x9f", + 0x00000393 => "\xe2", + 0x00000398 => "\xe9", + 0x000003a3 => "\xe4", + 0x000003a6 => "\xe8", + 0x000003a9 => "\xea", + 0x000003b1 => "\xe0", + 0x000003b4 => "\xeb", + 0x000003b5 => "\xee", + 0x000003c0 => "\xe3", + 0x000003c3 => "\xe5", + 0x000003c4 => "\xe7", + 0x000003c6 => "\xed", + 0x0000207f => "\xfc", + 0x000020a7 => "\x9e", + 0x00002219 => "\xf9", + 0x0000221a => "\xfb", + 0x0000221e => "\xec", + 0x00002229 => "\xef", + 0x00002248 => "\xf7", + 0x00002261 => "\xf0", + 0x00002264 => "\xf3", + 0x00002265 => "\xf2", + 0x00002310 => "\xa9", + 0x00002320 => "\xf4", + 0x00002321 => "\xf5", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002552 => "\xd5", + 0x00002553 => "\xd6", + 0x00002554 => "\xc9", + 0x00002555 => "\xb8", + 0x00002556 => "\xb7", + 0x00002557 => "\xbb", + 0x00002558 => "\xd4", + 0x00002559 => "\xd3", + 0x0000255a => "\xc8", + 0x0000255b => "\xbe", + 0x0000255c => "\xbd", + 0x0000255d => "\xbc", + 0x0000255e => "\xc6", + 0x0000255f => "\xc7", + 0x00002560 => "\xcc", + 0x00002561 => "\xb5", + 0x00002562 => "\xb6", + 0x00002563 => "\xb9", + 0x00002564 => "\xd1", + 0x00002565 => "\xd2", + 0x00002566 => "\xcb", + 0x00002567 => "\xcf", + 0x00002568 => "\xd0", + 0x00002569 => "\xca", + 0x0000256a => "\xd8", + 0x0000256b => "\xd7", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x0000258c => "\xdd", + 0x00002590 => "\xde", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM865 - Conversion routines for IBM865 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM865. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987) + alias CP865 + alias 865 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 81 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + 82 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 83 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 84 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 85 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 86 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 87 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 88 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 89 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 8A | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 8B | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 8C | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 8D | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 8E | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 8F | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 90 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 91 | 000000E6 | LATIN SMALL LETTER AE + 92 | 000000C6 | LATIN CAPITAL LETTER AE + 93 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 94 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 95 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 96 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 97 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 98 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + 99 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 9C | 000000A3 | POUND SIGN + 9D | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 9E | 000020A7 | PESETA SIGN + 9F | 00000192 | LATIN SMALL LETTER F WITH HOOK + A0 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + A1 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + A2 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + A3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + A4 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + A5 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + A6 | 000000AA | FEMININE ORDINAL INDICATOR + A7 | 000000BA | MASCULINE ORDINAL INDICATOR + A8 | 000000BF | INVERTED QUESTION MARK + A9 | 00002310 | REVERSED NOT SIGN + AA | 000000AC | NOT SIGN + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 000000BC | VULGAR FRACTION ONE QUARTER + AD | 000000A1 | INVERTED EXCLAMATION MARK + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000A4 | CURRENCY SIGN + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 0000258C | LEFT HALF BLOCK + DE | 00002590 | RIGHT HALF BLOCK + DF | 00002580 | UPPER HALF BLOCK + E0 | 000003B1 | GREEK SMALL LETTER ALPHA + E1 | 000000DF | LATIN SMALL LETTER SHARP S (German) + E2 | 00000393 | GREEK CAPITAL LETTER GAMMA + E3 | 000003C0 | GREEK SMALL LETTER PI + E4 | 000003A3 | GREEK CAPITAL LETTER SIGMA + E5 | 000003C3 | GREEK SMALL LETTER SIGMA + E6 | 000000B5 | MICRO SIGN + E7 | 000003C4 | GREEK SMALL LETTER TAU + E8 | 000003A6 | GREEK CAPITAL LETTER PHI + E9 | 00000398 | GREEK CAPITAL LETTER THETA + EA | 000003A9 | GREEK CAPITAL LETTER OMEGA + EB | 000003B4 | GREEK SMALL LETTER DELTA + EC | 0000221E | INFINITY + ED | 000003C6 | GREEK SMALL LETTER PHI + EE | 000003B5 | GREEK SMALL LETTER EPSILON + EF | 00002229 | INTERSECTION + F0 | 00002261 | IDENTICAL TO + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 00002265 | GREATER-THAN OR EQUAL TO + F3 | 00002264 | LESS-THAN OR EQUAL TO + F4 | 00002320 | TOP HALF INTEGRAL + F5 | 00002321 | BOTTOM HALF INTEGRAL + F6 | 000000F7 | DIVISION SIGN + F7 | 00002248 | ALMOST EQUAL TO + F8 | 000000B0 | DEGREE SIGN + F9 | 00002219 | BULLET OPERATOR + FA | 000000B7 | MIDDLE DOT + FB | 0000221A | SQUARE ROOT + FC | 0000207F | SUPERSCRIPT LATIN SMALL LETTER N + FD | 000000B2 | SUPERSCRIPT TWO + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM866.pm b/lib/Locale/RecodeData/IBM866.pm new file mode 100644 index 0000000..f2482c4 --- /dev/null +++ b/lib/Locale/RecodeData/IBM866.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM866. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM866; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x2561, + 0x2562, + 0x2556, + 0x2555, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x255c, + 0x255b, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x255e, + 0x255f, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x2567, + 0x2568, + 0x2564, + 0x2565, + 0x2559, + 0x2558, + 0x2552, + 0x2553, + 0x256b, + 0x256a, + 0x2518, + 0x250c, + 0x2588, + 0x2584, + 0x258c, + 0x2590, + 0x2580, + 0x0440, + 0x0441, + 0x0442, + 0x0443, + 0x0444, + 0x0445, + 0x0446, + 0x0447, + 0x0448, + 0x0449, + 0x044a, + 0x044b, + 0x044c, + 0x044d, + 0x044e, + 0x044f, + 0x0401, + 0x0451, + 0x0404, + 0x0454, + 0x0407, + 0x0457, + 0x040e, + 0x045e, + 0x00b0, + 0x2219, + 0x00b7, + 0x221a, + 0x2116, + 0x00a4, + 0x25a0, + 0x00a0, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd0\x90", + "\xd0\x91", + "\xd0\x92", + "\xd0\x93", + "\xd0\x94", + "\xd0\x95", + "\xd0\x96", + "\xd0\x97", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\xa4", + "\xd0\xa5", + "\xd0\xa6", + "\xd0\xa7", + "\xd0\xa8", + "\xd0\xa9", + "\xd0\xaa", + "\xd0\xab", + "\xd0\xac", + "\xd0\xad", + "\xd0\xae", + "\xd0\xaf", + "\xd0\xb0", + "\xd0\xb1", + "\xd0\xb2", + "\xd0\xb3", + "\xd0\xb4", + "\xd0\xb5", + "\xd0\xb6", + "\xd0\xb7", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xe2\x95\xa1", + "\xe2\x95\xa2", + "\xe2\x95\x96", + "\xe2\x95\x95", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xe2\x95\x9c", + "\xe2\x95\x9b", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa4", + "\xe2\x95\xa5", + "\xe2\x95\x99", + "\xe2\x95\x98", + "\xe2\x95\x92", + "\xe2\x95\x93", + "\xe2\x95\xab", + "\xe2\x95\xaa", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x80", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd1\x84", + "\xd1\x85", + "\xd1\x86", + "\xd1\x87", + "\xd1\x88", + "\xd1\x89", + "\xd1\x8a", + "\xd1\x8b", + "\xd1\x8c", + "\xd1\x8d", + "\xd1\x8e", + "\xd1\x8f", + "\xd0\x81", + "\xd1\x91", + "\xd0\x84", + "\xd1\x94", + "\xd0\x87", + "\xd1\x97", + "\xd0\x8e", + "\xd1\x9e", + "\xc2\xb0", + "\xe2\x88\x99", + "\xc2\xb7", + "\xe2\x88\x9a", + "\xe2\x84\x96", + "\xc2\xa4", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a4 => "\xfd", + 0x000000b0 => "\xf8", + 0x000000b7 => "\xfa", + 0x00000401 => "\xf0", + 0x00000404 => "\xf2", + 0x00000407 => "\xf4", + 0x0000040e => "\xf6", + 0x00000410 => "\x80", + 0x00000411 => "\x81", + 0x00000412 => "\x82", + 0x00000413 => "\x83", + 0x00000414 => "\x84", + 0x00000415 => "\x85", + 0x00000416 => "\x86", + 0x00000417 => "\x87", + 0x00000418 => "\x88", + 0x00000419 => "\x89", + 0x0000041a => "\x8a", + 0x0000041b => "\x8b", + 0x0000041c => "\x8c", + 0x0000041d => "\x8d", + 0x0000041e => "\x8e", + 0x0000041f => "\x8f", + 0x00000420 => "\x90", + 0x00000421 => "\x91", + 0x00000422 => "\x92", + 0x00000423 => "\x93", + 0x00000424 => "\x94", + 0x00000425 => "\x95", + 0x00000426 => "\x96", + 0x00000427 => "\x97", + 0x00000428 => "\x98", + 0x00000429 => "\x99", + 0x0000042a => "\x9a", + 0x0000042b => "\x9b", + 0x0000042c => "\x9c", + 0x0000042d => "\x9d", + 0x0000042e => "\x9e", + 0x0000042f => "\x9f", + 0x00000430 => "\xa0", + 0x00000431 => "\xa1", + 0x00000432 => "\xa2", + 0x00000433 => "\xa3", + 0x00000434 => "\xa4", + 0x00000435 => "\xa5", + 0x00000436 => "\xa6", + 0x00000437 => "\xa7", + 0x00000438 => "\xa8", + 0x00000439 => "\xa9", + 0x0000043a => "\xaa", + 0x0000043b => "\xab", + 0x0000043c => "\xac", + 0x0000043d => "\xad", + 0x0000043e => "\xae", + 0x0000043f => "\xaf", + 0x00000440 => "\xe0", + 0x00000441 => "\xe1", + 0x00000442 => "\xe2", + 0x00000443 => "\xe3", + 0x00000444 => "\xe4", + 0x00000445 => "\xe5", + 0x00000446 => "\xe6", + 0x00000447 => "\xe7", + 0x00000448 => "\xe8", + 0x00000449 => "\xe9", + 0x0000044a => "\xea", + 0x0000044b => "\xeb", + 0x0000044c => "\xec", + 0x0000044d => "\xed", + 0x0000044e => "\xee", + 0x0000044f => "\xef", + 0x00000451 => "\xf1", + 0x00000454 => "\xf3", + 0x00000457 => "\xf5", + 0x0000045e => "\xf7", + 0x00002116 => "\xfc", + 0x00002219 => "\xf9", + 0x0000221a => "\xfb", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002552 => "\xd5", + 0x00002553 => "\xd6", + 0x00002554 => "\xc9", + 0x00002555 => "\xb8", + 0x00002556 => "\xb7", + 0x00002557 => "\xbb", + 0x00002558 => "\xd4", + 0x00002559 => "\xd3", + 0x0000255a => "\xc8", + 0x0000255b => "\xbe", + 0x0000255c => "\xbd", + 0x0000255d => "\xbc", + 0x0000255e => "\xc6", + 0x0000255f => "\xc7", + 0x00002560 => "\xcc", + 0x00002561 => "\xb5", + 0x00002562 => "\xb6", + 0x00002563 => "\xb9", + 0x00002564 => "\xd1", + 0x00002565 => "\xd2", + 0x00002566 => "\xcb", + 0x00002567 => "\xcf", + 0x00002568 => "\xd0", + 0x00002569 => "\xca", + 0x0000256a => "\xd8", + 0x0000256b => "\xd7", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x0000258c => "\xdd", + 0x00002590 => "\xde", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM866 - Conversion routines for IBM866 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM866. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + automatically generated from the charDB + alias CP866 + alias 866 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 00000410 | CYRILLIC CAPITAL LETTER A + 81 | 00000411 | CYRILLIC CAPITAL LETTER BE + 82 | 00000412 | CYRILLIC CAPITAL LETTER VE + 83 | 00000413 | CYRILLIC CAPITAL LETTER GHE + 84 | 00000414 | CYRILLIC CAPITAL LETTER DE + 85 | 00000415 | CYRILLIC CAPITAL LETTER IE + 86 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + 87 | 00000417 | CYRILLIC CAPITAL LETTER ZE + 88 | 00000418 | CYRILLIC CAPITAL LETTER I + 89 | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + 8A | 0000041A | CYRILLIC CAPITAL LETTER KA + 8B | 0000041B | CYRILLIC CAPITAL LETTER EL + 8C | 0000041C | CYRILLIC CAPITAL LETTER EM + 8D | 0000041D | CYRILLIC CAPITAL LETTER EN + 8E | 0000041E | CYRILLIC CAPITAL LETTER O + 8F | 0000041F | CYRILLIC CAPITAL LETTER PE + 90 | 00000420 | CYRILLIC CAPITAL LETTER ER + 91 | 00000421 | CYRILLIC CAPITAL LETTER ES + 92 | 00000422 | CYRILLIC CAPITAL LETTER TE + 93 | 00000423 | CYRILLIC CAPITAL LETTER U + 94 | 00000424 | CYRILLIC CAPITAL LETTER EF + 95 | 00000425 | CYRILLIC CAPITAL LETTER HA + 96 | 00000426 | CYRILLIC CAPITAL LETTER TSE + 97 | 00000427 | CYRILLIC CAPITAL LETTER CHE + 98 | 00000428 | CYRILLIC CAPITAL LETTER SHA + 99 | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + 9A | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + 9B | 0000042B | CYRILLIC CAPITAL LETTER YERU + 9C | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + 9D | 0000042D | CYRILLIC CAPITAL LETTER E + 9E | 0000042E | CYRILLIC CAPITAL LETTER YU + 9F | 0000042F | CYRILLIC CAPITAL LETTER YA + A0 | 00000430 | CYRILLIC SMALL LETTER A + A1 | 00000431 | CYRILLIC SMALL LETTER BE + A2 | 00000432 | CYRILLIC SMALL LETTER VE + A3 | 00000433 | CYRILLIC SMALL LETTER GHE + A4 | 00000434 | CYRILLIC SMALL LETTER DE + A5 | 00000435 | CYRILLIC SMALL LETTER IE + A6 | 00000436 | CYRILLIC SMALL LETTER ZHE + A7 | 00000437 | CYRILLIC SMALL LETTER ZE + A8 | 00000438 | CYRILLIC SMALL LETTER I + A9 | 00000439 | CYRILLIC SMALL LETTER SHORT I + AA | 0000043A | CYRILLIC SMALL LETTER KA + AB | 0000043B | CYRILLIC SMALL LETTER EL + AC | 0000043C | CYRILLIC SMALL LETTER EM + AD | 0000043D | CYRILLIC SMALL LETTER EN + AE | 0000043E | CYRILLIC SMALL LETTER O + AF | 0000043F | CYRILLIC SMALL LETTER PE + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B6 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + B8 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + BE | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + C7 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + D0 | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + D1 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + D2 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + D3 | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + D4 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + D5 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + D6 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + D7 | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + D8 | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 0000258C | LEFT HALF BLOCK + DE | 00002590 | RIGHT HALF BLOCK + DF | 00002580 | UPPER HALF BLOCK + E0 | 00000440 | CYRILLIC SMALL LETTER ER + E1 | 00000441 | CYRILLIC SMALL LETTER ES + E2 | 00000442 | CYRILLIC SMALL LETTER TE + E3 | 00000443 | CYRILLIC SMALL LETTER U + E4 | 00000444 | CYRILLIC SMALL LETTER EF + E5 | 00000445 | CYRILLIC SMALL LETTER HA + E6 | 00000446 | CYRILLIC SMALL LETTER TSE + E7 | 00000447 | CYRILLIC SMALL LETTER CHE + E8 | 00000448 | CYRILLIC SMALL LETTER SHA + E9 | 00000449 | CYRILLIC SMALL LETTER SHCHA + EA | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + EB | 0000044B | CYRILLIC SMALL LETTER YERU + EC | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + ED | 0000044D | CYRILLIC SMALL LETTER E + EE | 0000044E | CYRILLIC SMALL LETTER YU + EF | 0000044F | CYRILLIC SMALL LETTER YA + F0 | 00000401 | CYRILLIC CAPITAL LETTER IO + F1 | 00000451 | CYRILLIC SMALL LETTER IO + F2 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + F3 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + F4 | 00000407 | CYRILLIC CAPITAL LETTER YI + F5 | 00000457 | CYRILLIC SMALL LETTER YI + F6 | 0000040E | CYRILLIC CAPITAL LETTER SHORT U + F7 | 0000045E | CYRILLIC SMALL LETTER SHORT U + F8 | 000000B0 | DEGREE SIGN + F9 | 00002219 | BULLET OPERATOR + FA | 000000B7 | MIDDLE DOT + FB | 0000221A | SQUARE ROOT + FC | 00002116 | NUMERO SIGN + FD | 000000A4 | CURRENCY SIGN + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM868.pm b/lib/Locale/RecodeData/IBM868.pm new file mode 100644 index 0000000..c15caaf --- /dev/null +++ b/lib/Locale/RecodeData/IBM868.pm @@ -0,0 +1,1091 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM868. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM868; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0660, + 0x0661, + 0x0662, + 0x0663, + 0x0664, + 0x0665, + 0x0666, + 0x0667, + 0x0668, + 0x0669, + 0x060c, + 0x061b, + 0x061f, + 0x0622, + 0x0627, + 0xfe8e, + 0xe016, + 0x0628, + 0xfe91, + 0x067e, + 0xfffd, + 0x0629, + 0x062a, + 0xfe97, + 0xfffd, + 0xfffd, + 0x062b, + 0xfe9b, + 0x062c, + 0xfe9f, + 0xfffd, + 0xfffd, + 0x062d, + 0xfea3, + 0x062e, + 0xfea7, + 0x062f, + 0xfffd, + 0x0630, + 0x0631, + 0xfffd, + 0x0632, + 0xfffd, + 0x0633, + 0xfeb3, + 0x0634, + 0x00ab, + 0x00bb, + 0xfeb7, + 0x0635, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0xfebb, + 0x0636, + 0xfebf, + 0x0637, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x0638, + 0x0639, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0xfeca, + 0xfecb, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0xfecc, + 0x063a, + 0xfece, + 0xfecf, + 0xfed0, + 0x0641, + 0xfed3, + 0x0642, + 0xfed7, + 0xfeda, + 0x2518, + 0x250c, + 0x2588, + 0x2580, + 0xfedb, + 0xfffd, + 0x2584, + 0xfffd, + 0x0644, + 0xfede, + 0xfee0, + 0x0645, + 0xfee3, + 0xfffd, + 0x0646, + 0xfee7, + 0xfffd, + 0x0648, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0621, + 0x00ad, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0651, + 0xfe7d, + 0xfffd, + 0x25a0, + 0x00a0, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd9\xa0", + "\xd9\xa1", + "\xd9\xa2", + "\xd9\xa3", + "\xd9\xa4", + "\xd9\xa5", + "\xd9\xa6", + "\xd9\xa7", + "\xd9\xa8", + "\xd9\xa9", + "\xd8\x8c", + "\xd8\x9b", + "\xd8\x9f", + "\xd8\xa2", + "\xd8\xa7", + "\xef\xba\x8e", + "\xee\x80\x96", + "\xd8\xa8", + "\xef\xba\x91", + "\xd9\xbe", + "\xef\xbf\xbd", + "\xd8\xa9", + "\xd8\xaa", + "\xef\xba\x97", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\xab", + "\xef\xba\x9b", + "\xd8\xac", + "\xef\xba\x9f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\xad", + "\xef\xba\xa3", + "\xd8\xae", + "\xef\xba\xa7", + "\xd8\xaf", + "\xef\xbf\xbd", + "\xd8\xb0", + "\xd8\xb1", + "\xef\xbf\xbd", + "\xd8\xb2", + "\xef\xbf\xbd", + "\xd8\xb3", + "\xef\xba\xb3", + "\xd8\xb4", + "\xc2\xab", + "\xc2\xbb", + "\xef\xba\xb7", + "\xd8\xb5", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xef\xba\xbb", + "\xd8\xb6", + "\xef\xba\xbf", + "\xd8\xb7", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xd8\xb8", + "\xd8\xb9", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xef\xbb\x8a", + "\xef\xbb\x8b", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xef\xbb\x8c", + "\xd8\xba", + "\xef\xbb\x8e", + "\xef\xbb\x8f", + "\xef\xbb\x90", + "\xd9\x81", + "\xef\xbb\x93", + "\xd9\x82", + "\xef\xbb\x97", + "\xef\xbb\x9a", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x80", + "\xef\xbb\x9b", + "\xef\xbf\xbd", + "\xe2\x96\x84", + "\xef\xbf\xbd", + "\xd9\x84", + "\xef\xbb\x9e", + "\xef\xbb\xa0", + "\xd9\x85", + "\xef\xbb\xa3", + "\xef\xbf\xbd", + "\xd9\x86", + "\xef\xbb\xa7", + "\xef\xbf\xbd", + "\xd9\x88", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\xa1", + "\xc2\xad", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd9\x91", + "\xef\xb9\xbd", + "\xef\xbf\xbd", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000ab => "\xae", + 0x000000ad => "\xf2", + 0x000000bb => "\xaf", + 0x0000060c => "\x8a", + 0x0000061b => "\x8b", + 0x0000061f => "\x8c", + 0x00000621 => "\xf1", + 0x00000622 => "\x8d", + 0x00000627 => "\x8e", + 0x00000628 => "\x91", + 0x00000629 => "\x95", + 0x0000062a => "\x96", + 0x0000062b => "\x9a", + 0x0000062c => "\x9c", + 0x0000062d => "\xa0", + 0x0000062e => "\xa2", + 0x0000062f => "\xa4", + 0x00000630 => "\xa6", + 0x00000631 => "\xa7", + 0x00000632 => "\xa9", + 0x00000633 => "\xab", + 0x00000634 => "\xad", + 0x00000635 => "\xb1", + 0x00000636 => "\xb8", + 0x00000637 => "\xba", + 0x00000638 => "\xbf", + 0x00000639 => "\xc0", + 0x0000063a => "\xd2", + 0x00000641 => "\xd6", + 0x00000642 => "\xd8", + 0x00000644 => "\xe3", + 0x00000645 => "\xe6", + 0x00000646 => "\xe9", + 0x00000648 => "\xec", + 0x00000651 => "\xfb", + 0x00000660 => "\x80", + 0x00000661 => "\x81", + 0x00000662 => "\x82", + 0x00000663 => "\x83", + 0x00000664 => "\x84", + 0x00000665 => "\x85", + 0x00000666 => "\x86", + 0x00000667 => "\x87", + 0x00000668 => "\x88", + 0x00000669 => "\x89", + 0x0000067e => "\x93", + 0x00002500 => "\xc6", + 0x00002502 => "\xb5", + 0x0000250c => "\xdc", + 0x00002510 => "\xc1", + 0x00002514 => "\xc2", + 0x00002518 => "\xdb", + 0x0000251c => "\xc5", + 0x00002524 => "\xb6", + 0x0000252c => "\xc4", + 0x00002534 => "\xc3", + 0x0000253c => "\xc7", + 0x00002550 => "\xcf", + 0x00002551 => "\xbc", + 0x00002554 => "\xcb", + 0x00002557 => "\xbd", + 0x0000255a => "\xca", + 0x0000255d => "\xbe", + 0x00002560 => "\xce", + 0x00002563 => "\xbb", + 0x00002566 => "\xcd", + 0x00002569 => "\xcc", + 0x0000256c => "\xd0", + 0x00002580 => "\xde", + 0x00002584 => "\xe1", + 0x00002588 => "\xdd", + 0x00002591 => "\xb2", + 0x00002592 => "\xb3", + 0x00002593 => "\xb4", + 0x000025a0 => "\xfe", + 0x0000e016 => "\x90", + 0x0000fe7d => "\xfc", + 0x0000fe8e => "\x8f", + 0x0000fe91 => "\x92", + 0x0000fe97 => "\x97", + 0x0000fe9b => "\x9b", + 0x0000fe9f => "\x9d", + 0x0000fea3 => "\xa1", + 0x0000fea7 => "\xa3", + 0x0000feb3 => "\xac", + 0x0000feb7 => "\xb0", + 0x0000febb => "\xb7", + 0x0000febf => "\xb9", + 0x0000feca => "\xc8", + 0x0000fecb => "\xc9", + 0x0000fecc => "\xd1", + 0x0000fece => "\xd3", + 0x0000fecf => "\xd4", + 0x0000fed0 => "\xd5", + 0x0000fed3 => "\xd7", + 0x0000fed7 => "\xd9", + 0x0000feda => "\xda", + 0x0000fedb => "\xdf", + 0x0000fede => "\xe4", + 0x0000fee0 => "\xe5", + 0x0000fee3 => "\xe7", + 0x0000fee7 => "\xea", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x8c"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM868 - Conversion routines for IBM868 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM868. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP868 + alias CP-AR + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000660 | ARABIC-INDIC DIGIT ZERO + 81 | 00000661 | ARABIC-INDIC DIGIT ONE + 82 | 00000662 | ARABIC-INDIC DIGIT TWO + 83 | 00000663 | ARABIC-INDIC DIGIT THREE + 84 | 00000664 | ARABIC-INDIC DIGIT FOUR + 85 | 00000665 | ARABIC-INDIC DIGIT FIVE + 86 | 00000666 | ARABIC-INDIC DIGIT SIX + 87 | 00000667 | ARABIC-INDIC DIGIT SEVEN + 88 | 00000668 | ARABIC-INDIC DIGIT EIGHT + 89 | 00000669 | ARABIC-INDIC DIGIT NINE + 8A | 0000060C | ARABIC COMMA + 8B | 0000061B | ARABIC SEMICOLON + 8C | 0000061F | ARABIC QUESTION MARK + 8D | 00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE + 8E | 00000627 | ARABIC LETTER ALEF + 8F | 0000FE8E | ARABIC LETTER ALEF FINAL FORM + 90 | 0000E016 | ARABIC LETTER ALEF FINAL FORM COMPATIBILITY EIBM868_90E + 91 | 00000628 | ARABIC LETTER BEH + 92 | 0000FE91 | ARABIC LETTER BEH INITIAL FORM + 93 | 0000067E | ARABIC LETTER PEH + 95 | 00000629 | ARABIC LETTER TEH MARBUTA + 96 | 0000062A | ARABIC LETTER TEH + 97 | 0000FE97 | ARABIC LETTER TEH INITIAL FORM + 9A | 0000062B | ARABIC LETTER THEH + 9B | 0000FE9B | ARABIC LETTER THEH INITIAL FORM + 9C | 0000062C | ARABIC LETTER JEEM + 9D | 0000FE9F | ARABIC LETTER JEEM INITIAL FORM + A0 | 0000062D | ARABIC LETTER HAH + A1 | 0000FEA3 | ARABIC LETTER HAH INITIAL FORM + A2 | 0000062E | ARABIC LETTER KHAH + A3 | 0000FEA7 | ARABIC LETTER KHAH INITIAL FORM + A4 | 0000062F | ARABIC LETTER DAL + A6 | 00000630 | ARABIC LETTER THAL + A7 | 00000631 | ARABIC LETTER REH + A9 | 00000632 | ARABIC LETTER ZAIN + AB | 00000633 | ARABIC LETTER SEEN + AC | 0000FEB3 | ARABIC LETTER SEEN INITIAL FORM + AD | 00000634 | ARABIC LETTER SHEEN + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 0000FEB7 | ARABIC LETTER SHEEN INITIAL FORM + B1 | 00000635 | ARABIC LETTER SAD + B2 | 00002591 | LIGHT SHADE + B3 | 00002592 | MEDIUM SHADE + B4 | 00002593 | DARK SHADE + B5 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B6 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B7 | 0000FEBB | ARABIC LETTER SAD INITIAL FORM + B8 | 00000636 | ARABIC LETTER DAD + B9 | 0000FEBF | ARABIC LETTER DAD INITIAL FORM + BA | 00000637 | ARABIC LETTER TAH + BB | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BC | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BD | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BE | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BF | 00000638 | ARABIC LETTER ZAH + C0 | 00000639 | ARABIC LETTER AIN + C1 | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C2 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C3 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C4 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C5 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C6 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C7 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C8 | 0000FECA | ARABIC LETTER AIN FINAL FORM + C9 | 0000FECB | ARABIC LETTER AIN INITIAL FORM + CA | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + CB | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CC | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CD | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CE | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CF | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + D0 | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + D1 | 0000FECC | ARABIC LETTER AIN MEDIAL FORM + D2 | 0000063A | ARABIC LETTER GHAIN + D3 | 0000FECE | ARABIC LETTER GHAIN FINAL FORM + D4 | 0000FECF | ARABIC LETTER GHAIN INITIAL FORM + D5 | 0000FED0 | ARABIC LETTER GHAIN MEDIAL FORM + D6 | 00000641 | ARABIC LETTER FEH + D7 | 0000FED3 | ARABIC LETTER FEH INITIAL FORM + D8 | 00000642 | ARABIC LETTER QAF + D9 | 0000FED7 | ARABIC LETTER QAF INITIAL FORM + DA | 0000FEDA | ARABIC LETTER KAF FINAL FORM + DB | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DC | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DD | 00002588 | FULL BLOCK + DE | 00002580 | UPPER HALF BLOCK + DF | 0000FEDB | ARABIC LETTER KAF INITIAL FORM + E1 | 00002584 | LOWER HALF BLOCK + E3 | 00000644 | ARABIC LETTER LAM + E4 | 0000FEDE | ARABIC LETTER LAM FINAL FORM + E5 | 0000FEE0 | ARABIC LETTER LAM MEDIAL FORM + E6 | 00000645 | ARABIC LETTER MEEM + E7 | 0000FEE3 | ARABIC LETTER MEEM INITIAL FORM + E9 | 00000646 | ARABIC LETTER NOON + EA | 0000FEE7 | ARABIC LETTER NOON INITIAL FORM + EC | 00000648 | ARABIC LETTER WAW + F1 | 00000621 | ARABIC LETTER HAMZA + F2 | 000000AD | SOFT HYPHEN + FB | 00000651 | ARABIC SHADDA + FC | 0000FE7D | ARABIC SHADDA MEDIAL FORM + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM869.pm b/lib/Locale/RecodeData/IBM869.pm new file mode 100644 index 0000000..2555bb0 --- /dev/null +++ b/lib/Locale/RecodeData/IBM869.pm @@ -0,0 +1,1124 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM869. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM869; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0386, + 0xfffd, + 0x00b7, + 0x00ac, + 0x00a6, + 0x2018, + 0x2019, + 0x0388, + 0x2015, + 0x0389, + 0x038a, + 0x03aa, + 0x038c, + 0xfffd, + 0xfffd, + 0x038e, + 0x03ab, + 0x00a9, + 0x038f, + 0x00b2, + 0x00b3, + 0x03ac, + 0x00a3, + 0x03ad, + 0x03ae, + 0x03af, + 0x03ca, + 0x0390, + 0x03cc, + 0x03cd, + 0x0391, + 0x0392, + 0x0393, + 0x0394, + 0x0395, + 0x0396, + 0x0397, + 0x00bd, + 0x0398, + 0x0399, + 0x00ab, + 0x00bb, + 0x2591, + 0x2592, + 0x2593, + 0x2502, + 0x2524, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x2563, + 0x2551, + 0x2557, + 0x255d, + 0x039e, + 0x039f, + 0x2510, + 0x2514, + 0x2534, + 0x252c, + 0x251c, + 0x2500, + 0x253c, + 0x03a0, + 0x03a1, + 0x255a, + 0x2554, + 0x2569, + 0x2566, + 0x2560, + 0x2550, + 0x256c, + 0x03a3, + 0x03a4, + 0x03a5, + 0x03a6, + 0x03a7, + 0x03a8, + 0x03a9, + 0x03b1, + 0x03b2, + 0x03b3, + 0x2518, + 0x250c, + 0x2588, + 0x2584, + 0x03b4, + 0x03b5, + 0x2580, + 0x03b6, + 0x03b7, + 0x03b8, + 0x03b9, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03be, + 0x03bf, + 0x03c0, + 0x03c1, + 0x03c3, + 0x03c2, + 0x03c4, + 0x0384, + 0x00ad, + 0x00b1, + 0x03c5, + 0x03c6, + 0x03c7, + 0x00a7, + 0x03c8, + 0x0385, + 0x00b0, + 0x00a8, + 0x03c9, + 0x03cb, + 0x03b0, + 0x03ce, + 0x25a0, + 0x00a0, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xce\x86", + "\xef\xbf\xbd", + "\xc2\xb7", + "\xc2\xac", + "\xc2\xa6", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xce\x88", + "\xe2\x80\x95", + "\xce\x89", + "\xce\x8a", + "\xce\xaa", + "\xce\x8c", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xce\x8e", + "\xce\xab", + "\xc2\xa9", + "\xce\x8f", + "\xc2\xb2", + "\xc2\xb3", + "\xce\xac", + "\xc2\xa3", + "\xce\xad", + "\xce\xae", + "\xce\xaf", + "\xcf\x8a", + "\xce\x90", + "\xcf\x8c", + "\xcf\x8d", + "\xce\x91", + "\xce\x92", + "\xce\x93", + "\xce\x94", + "\xce\x95", + "\xce\x96", + "\xce\x97", + "\xc2\xbd", + "\xce\x98", + "\xce\x99", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x94\x82", + "\xe2\x94\xa4", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xe2\x95\xa3", + "\xe2\x95\x91", + "\xe2\x95\x97", + "\xe2\x95\x9d", + "\xce\x9e", + "\xce\x9f", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\xb4", + "\xe2\x94\xac", + "\xe2\x94\x9c", + "\xe2\x94\x80", + "\xe2\x94\xbc", + "\xce\xa0", + "\xce\xa1", + "\xe2\x95\x9a", + "\xe2\x95\x94", + "\xe2\x95\xa9", + "\xe2\x95\xa6", + "\xe2\x95\xa0", + "\xe2\x95\x90", + "\xe2\x95\xac", + "\xce\xa3", + "\xce\xa4", + "\xce\xa5", + "\xce\xa6", + "\xce\xa7", + "\xce\xa8", + "\xce\xa9", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xe2\x94\x98", + "\xe2\x94\x8c", + "\xe2\x96\x88", + "\xe2\x96\x84", + "\xce\xb4", + "\xce\xb5", + "\xe2\x96\x80", + "\xce\xb6", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbe", + "\xce\xbf", + "\xcf\x80", + "\xcf\x81", + "\xcf\x83", + "\xcf\x82", + "\xcf\x84", + "\xce\x84", + "\xc2\xad", + "\xc2\xb1", + "\xcf\x85", + "\xcf\x86", + "\xcf\x87", + "\xc2\xa7", + "\xcf\x88", + "\xce\x85", + "\xc2\xb0", + "\xc2\xa8", + "\xcf\x89", + "\xcf\x8b", + "\xce\xb0", + "\xcf\x8e", + "\xe2\x96\xa0", + "\xc2\xa0", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xff", + 0x000000a3 => "\x9c", + 0x000000a6 => "\x8a", + 0x000000a7 => "\xf5", + 0x000000a8 => "\xf9", + 0x000000a9 => "\x97", + 0x000000ab => "\xae", + 0x000000ac => "\x89", + 0x000000ad => "\xf0", + 0x000000b0 => "\xf8", + 0x000000b1 => "\xf1", + 0x000000b2 => "\x99", + 0x000000b3 => "\x9a", + 0x000000b7 => "\x88", + 0x000000bb => "\xaf", + 0x000000bd => "\xab", + 0x00000384 => "\xef", + 0x00000385 => "\xf7", + 0x00000386 => "\x86", + 0x00000388 => "\x8d", + 0x00000389 => "\x8f", + 0x0000038a => "\x90", + 0x0000038c => "\x92", + 0x0000038e => "\x95", + 0x0000038f => "\x98", + 0x00000390 => "\xa1", + 0x00000391 => "\xa4", + 0x00000392 => "\xa5", + 0x00000393 => "\xa6", + 0x00000394 => "\xa7", + 0x00000395 => "\xa8", + 0x00000396 => "\xa9", + 0x00000397 => "\xaa", + 0x00000398 => "\xac", + 0x00000399 => "\xad", + 0x0000039a => "\xb5", + 0x0000039b => "\xb6", + 0x0000039c => "\xb7", + 0x0000039d => "\xb8", + 0x0000039e => "\xbd", + 0x0000039f => "\xbe", + 0x000003a0 => "\xc6", + 0x000003a1 => "\xc7", + 0x000003a3 => "\xcf", + 0x000003a4 => "\xd0", + 0x000003a5 => "\xd1", + 0x000003a6 => "\xd2", + 0x000003a7 => "\xd3", + 0x000003a8 => "\xd4", + 0x000003a9 => "\xd5", + 0x000003aa => "\x91", + 0x000003ab => "\x96", + 0x000003ac => "\x9b", + 0x000003ad => "\x9d", + 0x000003ae => "\x9e", + 0x000003af => "\x9f", + 0x000003b0 => "\xfc", + 0x000003b1 => "\xd6", + 0x000003b2 => "\xd7", + 0x000003b3 => "\xd8", + 0x000003b4 => "\xdd", + 0x000003b5 => "\xde", + 0x000003b6 => "\xe0", + 0x000003b7 => "\xe1", + 0x000003b8 => "\xe2", + 0x000003b9 => "\xe3", + 0x000003ba => "\xe4", + 0x000003bb => "\xe5", + 0x000003bc => "\xe6", + 0x000003bd => "\xe7", + 0x000003be => "\xe8", + 0x000003bf => "\xe9", + 0x000003c0 => "\xea", + 0x000003c1 => "\xeb", + 0x000003c2 => "\xed", + 0x000003c3 => "\xec", + 0x000003c4 => "\xee", + 0x000003c5 => "\xf2", + 0x000003c6 => "\xf3", + 0x000003c7 => "\xf4", + 0x000003c8 => "\xf6", + 0x000003c9 => "\xfa", + 0x000003ca => "\xa0", + 0x000003cb => "\xfb", + 0x000003cc => "\xa2", + 0x000003cd => "\xa3", + 0x000003ce => "\xfd", + 0x00002015 => "\x8e", + 0x00002018 => "\x8b", + 0x00002019 => "\x8c", + 0x00002500 => "\xc4", + 0x00002502 => "\xb3", + 0x0000250c => "\xda", + 0x00002510 => "\xbf", + 0x00002514 => "\xc0", + 0x00002518 => "\xd9", + 0x0000251c => "\xc3", + 0x00002524 => "\xb4", + 0x0000252c => "\xc2", + 0x00002534 => "\xc1", + 0x0000253c => "\xc5", + 0x00002550 => "\xcd", + 0x00002551 => "\xba", + 0x00002554 => "\xc9", + 0x00002557 => "\xbb", + 0x0000255a => "\xc8", + 0x0000255d => "\xbc", + 0x00002560 => "\xcc", + 0x00002563 => "\xb9", + 0x00002566 => "\xcb", + 0x00002569 => "\xca", + 0x0000256c => "\xce", + 0x00002580 => "\xdf", + 0x00002584 => "\xdc", + 0x00002588 => "\xdb", + 0x00002591 => "\xb0", + 0x00002592 => "\xb1", + 0x00002593 => "\xb2", + 0x000025a0 => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM869 - Conversion routines for IBM869 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM869. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM Keyboard layouts and code pages, PN 07G4586 June 1991 + alias CP869 + alias 869 + alias CP-GR + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 86 | 00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS + 88 | 000000B7 | MIDDLE DOT + 89 | 000000AC | NOT SIGN + 8A | 000000A6 | BROKEN BAR + 8B | 00002018 | LEFT SINGLE QUOTATION MARK + 8C | 00002019 | RIGHT SINGLE QUOTATION MARK + 8D | 00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS + 8E | 00002015 | HORIZONTAL BAR + 8F | 00000389 | GREEK CAPITAL LETTER ETA WITH TONOS + 90 | 0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS + 91 | 000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 92 | 0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS + 95 | 0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS + 96 | 000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 97 | 000000A9 | COPYRIGHT SIGN + 98 | 0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS + 99 | 000000B2 | SUPERSCRIPT TWO + 9A | 000000B3 | SUPERSCRIPT THREE + 9B | 000003AC | GREEK SMALL LETTER ALPHA WITH TONOS + 9C | 000000A3 | POUND SIGN + 9D | 000003AD | GREEK SMALL LETTER EPSILON WITH TONOS + 9E | 000003AE | GREEK SMALL LETTER ETA WITH TONOS + 9F | 000003AF | GREEK SMALL LETTER IOTA WITH TONOS + A0 | 000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA + A1 | 00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + A2 | 000003CC | GREEK SMALL LETTER OMICRON WITH TONOS + A3 | 000003CD | GREEK SMALL LETTER UPSILON WITH TONOS + A4 | 00000391 | GREEK CAPITAL LETTER ALPHA + A5 | 00000392 | GREEK CAPITAL LETTER BETA + A6 | 00000393 | GREEK CAPITAL LETTER GAMMA + A7 | 00000394 | GREEK CAPITAL LETTER DELTA + A8 | 00000395 | GREEK CAPITAL LETTER EPSILON + A9 | 00000396 | GREEK CAPITAL LETTER ZETA + AA | 00000397 | GREEK CAPITAL LETTER ETA + AB | 000000BD | VULGAR FRACTION ONE HALF + AC | 00000398 | GREEK CAPITAL LETTER THETA + AD | 00000399 | GREEK CAPITAL LETTER IOTA + AE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + B0 | 00002591 | LIGHT SHADE + B1 | 00002592 | MEDIUM SHADE + B2 | 00002593 | DARK SHADE + B3 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + B4 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + B5 | 0000039A | GREEK CAPITAL LETTER KAPPA + B6 | 0000039B | GREEK CAPITAL LETTER LAMDA + B7 | 0000039C | GREEK CAPITAL LETTER MU + B8 | 0000039D | GREEK CAPITAL LETTER NU + B9 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + BA | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + BB | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + BC | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + BD | 0000039E | GREEK CAPITAL LETTER XI + BE | 0000039F | GREEK CAPITAL LETTER OMICRON + BF | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + C0 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + C1 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + C2 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + C3 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + C4 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + C5 | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + C6 | 000003A0 | GREEK CAPITAL LETTER PI + C7 | 000003A1 | GREEK CAPITAL LETTER RHO + C8 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C9 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + CA | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CB | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + CC | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + CD | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + CE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CF | 000003A3 | GREEK CAPITAL LETTER SIGMA + D0 | 000003A4 | GREEK CAPITAL LETTER TAU + D1 | 000003A5 | GREEK CAPITAL LETTER UPSILON + D2 | 000003A6 | GREEK CAPITAL LETTER PHI + D3 | 000003A7 | GREEK CAPITAL LETTER CHI + D4 | 000003A8 | GREEK CAPITAL LETTER PSI + D5 | 000003A9 | GREEK CAPITAL LETTER OMEGA + D6 | 000003B1 | GREEK SMALL LETTER ALPHA + D7 | 000003B2 | GREEK SMALL LETTER BETA + D8 | 000003B3 | GREEK SMALL LETTER GAMMA + D9 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + DA | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + DB | 00002588 | FULL BLOCK + DC | 00002584 | LOWER HALF BLOCK + DD | 000003B4 | GREEK SMALL LETTER DELTA + DE | 000003B5 | GREEK SMALL LETTER EPSILON + DF | 00002580 | UPPER HALF BLOCK + E0 | 000003B6 | GREEK SMALL LETTER ZETA + E1 | 000003B7 | GREEK SMALL LETTER ETA + E2 | 000003B8 | GREEK SMALL LETTER THETA + E3 | 000003B9 | GREEK SMALL LETTER IOTA + E4 | 000003BA | GREEK SMALL LETTER KAPPA + E5 | 000003BB | GREEK SMALL LETTER LAMDA + E6 | 000003BC | GREEK SMALL LETTER MU + E7 | 000003BD | GREEK SMALL LETTER NU + E8 | 000003BE | GREEK SMALL LETTER XI + E9 | 000003BF | GREEK SMALL LETTER OMICRON + EA | 000003C0 | GREEK SMALL LETTER PI + EB | 000003C1 | GREEK SMALL LETTER RHO + EC | 000003C3 | GREEK SMALL LETTER SIGMA + ED | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + EE | 000003C4 | GREEK SMALL LETTER TAU + EF | 00000384 | GREEK TONOS + F0 | 000000AD | SOFT HYPHEN + F1 | 000000B1 | PLUS-MINUS SIGN + F2 | 000003C5 | GREEK SMALL LETTER UPSILON + F3 | 000003C6 | GREEK SMALL LETTER PHI + F4 | 000003C7 | GREEK SMALL LETTER CHI + F5 | 000000A7 | SECTION SIGN + F6 | 000003C8 | GREEK SMALL LETTER PSI + F7 | 00000385 | GREEK DIALYTIKA TONOS + F8 | 000000B0 | DEGREE SIGN + F9 | 000000A8 | DIAERESIS + FA | 000003C9 | GREEK SMALL LETTER OMEGA + FB | 000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA + FC | 000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + FD | 000003CE | GREEK SMALL LETTER OMEGA WITH TONOS + FE | 000025A0 | BLACK SQUARE + FF | 000000A0 | NO-BREAK SPACE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM870.pm b/lib/Locale/RecodeData/IBM870.pm new file mode 100644 index 0000000..b950329 --- /dev/null +++ b/lib/Locale/RecodeData/IBM870.pm @@ -0,0 +1,1120 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM870. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM870; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0xfffd, + 0x00e4, + 0xfffd, + 0x00e1, + 0x0103, + 0x010d, + 0x00e7, + 0x0107, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x00e9, + 0xfffd, + 0x00eb, + 0x016f, + 0x00ed, + 0xfffd, + 0x013e, + 0x013a, + 0x00df, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfffd, + 0x00c4, + 0x02dd, + 0x00c1, + 0xfffd, + 0x010c, + 0x00c7, + 0x0106, + 0x007c, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x02c7, + 0x00c9, + 0xfffd, + 0x00cb, + 0x016e, + 0x00cd, + 0xfffd, + 0x013d, + 0x0139, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x02d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x015b, + 0x0148, + 0x0111, + 0x00fd, + 0x0159, + 0xfffd, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x0142, + 0x0144, + 0x0161, + 0x00b8, + 0x02db, + 0x00a4, + 0x0105, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x015a, + 0x0147, + 0x0110, + 0x00dd, + 0x0158, + 0xfffd, + 0x00b7, + 0x0104, + 0x017c, + 0xfffd, + 0x017b, + 0x00a7, + 0x00b6, + 0x017e, + 0x017a, + 0x017d, + 0x0179, + 0x0143, + 0x0160, + 0x00a8, + 0x00b4, + 0x00d7, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x00f6, + 0x0155, + 0x00f3, + 0x0151, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x011a, + 0x0171, + 0x00fc, + 0x0165, + 0x00fa, + 0x011b, + 0x005c, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x010f, + 0x00d4, + 0x00d6, + 0x0154, + 0x00d3, + 0x0150, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x010e, + 0x0170, + 0x00dc, + 0x0164, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xef\xbf\xbd", + "\xc3\xa4", + "\xef\xbf\xbd", + "\xc3\xa1", + "\xc4\x83", + "\xc4\x8d", + "\xc3\xa7", + "\xc4\x87", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xc3\xa9", + "\xef\xbf\xbd", + "\xc3\xab", + "\xc5\xaf", + "\xc3\xad", + "\xef\xbf\xbd", + "\xc4\xbe", + "\xc4\xba", + "\xc3\x9f", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xbf\xbd", + "\xc3\x84", + "\xcb\x9d", + "\xc3\x81", + "\xef\xbf\xbd", + "\xc4\x8c", + "\xc3\x87", + "\xc4\x86", + "\x7c", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xcb\x87", + "\xc3\x89", + "\xef\xbf\xbd", + "\xc3\x8b", + "\xc5\xae", + "\xc3\x8d", + "\xef\xbf\xbd", + "\xc4\xbd", + "\xc4\xb9", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xcb\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc5\x9b", + "\xc5\x88", + "\xc4\x91", + "\xc3\xbd", + "\xc5\x99", + "\xef\xbf\xbd", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc5\x82", + "\xc5\x84", + "\xc5\xa1", + "\xc2\xb8", + "\xcb\x9b", + "\xc2\xa4", + "\xc4\x85", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc5\x9a", + "\xc5\x87", + "\xc4\x90", + "\xc3\x9d", + "\xc5\x98", + "\xef\xbf\xbd", + "\xc2\xb7", + "\xc4\x84", + "\xc5\xbc", + "\xef\xbf\xbd", + "\xc5\xbb", + "\xc2\xa7", + "\xc2\xb6", + "\xc5\xbe", + "\xc5\xba", + "\xc5\xbd", + "\xc5\xb9", + "\xc5\x83", + "\xc5\xa0", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\xc3\xb6", + "\xc5\x95", + "\xc3\xb3", + "\xc5\x91", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc4\x9a", + "\xc5\xb1", + "\xc3\xbc", + "\xc5\xa5", + "\xc3\xba", + "\xc4\x9b", + "\x5c", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc4\x8f", + "\xc3\x94", + "\xc3\x96", + "\xc5\x94", + "\xc3\x93", + "\xc5\x90", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc4\x8e", + "\xc5\xb0", + "\xc3\x9c", + "\xc5\xa4", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005c => "\xe0", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\x6a", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a4 => "\x9f", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000ad => "\xca", + 0x000000b0 => "\x90", + 0x000000b4 => "\xbe", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb0", + 0x000000b8 => "\x9d", + 0x000000c1 => "\x65", + 0x000000c4 => "\x63", + 0x000000c7 => "\x68", + 0x000000c9 => "\x71", + 0x000000cb => "\x73", + 0x000000cd => "\x75", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d6 => "\xec", + 0x000000d7 => "\xbf", + 0x000000da => "\xfe", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000df => "\x59", + 0x000000e1 => "\x45", + 0x000000e4 => "\x43", + 0x000000e7 => "\x48", + 0x000000e9 => "\x51", + 0x000000eb => "\x53", + 0x000000ed => "\x55", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f6 => "\xcc", + 0x000000f7 => "\xe1", + 0x000000fa => "\xde", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x00000103 => "\x46", + 0x00000104 => "\xb1", + 0x00000105 => "\xa0", + 0x00000106 => "\x69", + 0x00000107 => "\x49", + 0x0000010c => "\x67", + 0x0000010d => "\x47", + 0x0000010e => "\xfa", + 0x0000010f => "\xea", + 0x00000110 => "\xac", + 0x00000111 => "\x8c", + 0x0000011a => "\xda", + 0x0000011b => "\xdf", + 0x00000139 => "\x78", + 0x0000013a => "\x58", + 0x0000013d => "\x77", + 0x0000013e => "\x57", + 0x00000142 => "\x9a", + 0x00000143 => "\xbb", + 0x00000144 => "\x9b", + 0x00000147 => "\xab", + 0x00000148 => "\x8b", + 0x00000150 => "\xef", + 0x00000151 => "\xcf", + 0x00000154 => "\xed", + 0x00000155 => "\xcd", + 0x00000158 => "\xae", + 0x00000159 => "\x8e", + 0x0000015a => "\xaa", + 0x0000015b => "\x8a", + 0x00000160 => "\xbc", + 0x00000161 => "\x9c", + 0x00000164 => "\xfd", + 0x00000165 => "\xdd", + 0x0000016e => "\x74", + 0x0000016f => "\x54", + 0x00000170 => "\xfb", + 0x00000171 => "\xdb", + 0x00000179 => "\xba", + 0x0000017a => "\xb8", + 0x0000017b => "\xb4", + 0x0000017c => "\xb2", + 0x0000017d => "\xb9", + 0x0000017e => "\xb7", + 0x000002c7 => "\x70", + 0x000002d8 => "\x80", + 0x000002db => "\x9e", + 0x000002dd => "\x64", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM870 - Conversion routines for IBM870 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM870. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP870 + alias EBCDIC-CP-ROECE + alias EBCDIC-CP-YU + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 00000103 | LATIN SMALL LETTER A WITH BREVE + 47 | 0000010D | LATIN SMALL LETTER C WITH CARON + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 00000107 | LATIN SMALL LETTER C WITH ACUTE + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 0000016F | LATIN SMALL LETTER U WITH RING ABOVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 57 | 0000013E | LATIN SMALL LETTER L WITH CARON + 58 | 0000013A | LATIN SMALL LETTER L WITH ACUTE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000002DD | DOUBLE ACUTE ACCENT + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 67 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE + 6A | 0000007C | VERTICAL LINE + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000002C7 | CARON (Mandarin Chinese third tone) + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 77 | 0000013D | LATIN CAPITAL LETTER L WITH CARON + 78 | 00000139 | LATIN CAPITAL LETTER L WITH ACUTE + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000002D8 | BREVE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 0000015B | LATIN SMALL LETTER S WITH ACUTE + 8B | 00000148 | LATIN SMALL LETTER N WITH CARON + 8C | 00000111 | LATIN SMALL LETTER D WITH STROKE + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 00000159 | LATIN SMALL LETTER R WITH CARON + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 00000142 | LATIN SMALL LETTER L WITH STROKE + 9B | 00000144 | LATIN SMALL LETTER N WITH ACUTE + 9C | 00000161 | LATIN SMALL LETTER S WITH CARON + 9D | 000000B8 | CEDILLA + 9E | 000002DB | OGONEK + 9F | 000000A4 | CURRENCY SIGN + A0 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 0000015A | LATIN CAPITAL LETTER S WITH ACUTE + AB | 00000147 | LATIN CAPITAL LETTER N WITH CARON + AC | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 00000158 | LATIN CAPITAL LETTER R WITH CARON + B0 | 000000B7 | MIDDLE DOT + B1 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + B2 | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + B4 | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 0000017E | LATIN SMALL LETTER Z WITH CARON + B8 | 0000017A | LATIN SMALL LETTER Z WITH ACUTE + B9 | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + BA | 00000179 | LATIN CAPITAL LETTER Z WITH ACUTE + BB | 00000143 | LATIN CAPITAL LETTER N WITH ACUTE + BC | 00000160 | LATIN CAPITAL LETTER S WITH CARON + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + CD | 00000155 | LATIN SMALL LETTER R WITH ACUTE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 0000011A | LATIN CAPITAL LETTER E WITH CARON + DB | 00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 00000165 | LATIN SMALL LETTER T WITH CARON + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 0000011B | LATIN SMALL LETTER E WITH CARON + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 0000010F | LATIN SMALL LETTER D WITH CARON + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + ED | 00000154 | LATIN CAPITAL LETTER R WITH ACUTE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 0000010E | LATIN CAPITAL LETTER D WITH CARON + FB | 00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 00000164 | LATIN CAPITAL LETTER T WITH CARON + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM871.pm b/lib/Locale/RecodeData/IBM871.pm new file mode 100644 index 0000000..81ba19b --- /dev/null +++ b/lib/Locale/RecodeData/IBM871.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM871. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM871; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00f1, + 0x00fe, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x00c6, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x00d6, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0x00c3, + 0x00c5, + 0x00c7, + 0x00d1, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00f8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00f0, + 0x003a, + 0x0023, + 0x00d0, + 0x0027, + 0x003d, + 0x0022, + 0x00d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x00ab, + 0x00bb, + 0x0060, + 0x00fd, + 0x007b, + 0x00b1, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x00aa, + 0x00ba, + 0x007d, + 0x00b8, + 0x005d, + 0x00a4, + 0x00b5, + 0x00f6, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x00a1, + 0x00bf, + 0x0040, + 0x00dd, + 0x005b, + 0x00ae, + 0x00a2, + 0x00a3, + 0x00a5, + 0x00b7, + 0x00a9, + 0x00a7, + 0x00b6, + 0x00bc, + 0x00bd, + 0x00be, + 0x00ac, + 0x007c, + 0x00af, + 0x00a8, + 0x005c, + 0x00d7, + 0x00de, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x007e, + 0x00f2, + 0x00f3, + 0x00f5, + 0x00e6, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b9, + 0x00fb, + 0x00fc, + 0x00f9, + 0x00fa, + 0x00ff, + 0x00b4, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x005e, + 0x00d2, + 0x00d3, + 0x00d5, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x00dc, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xb1", + "\xc3\xbe", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\xc3\x86", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\xc3\x96", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xc3\x83", + "\xc3\x85", + "\xc3\x87", + "\xc3\x91", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc3\xb8", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\xb0", + "\x3a", + "\x23", + "\xc3\x90", + "\x27", + "\x3d", + "\x22", + "\xc3\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc2\xab", + "\xc2\xbb", + "\x60", + "\xc3\xbd", + "\x7b", + "\xc2\xb1", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc2\xaa", + "\xc2\xba", + "\x7d", + "\xc2\xb8", + "\x5d", + "\xc2\xa4", + "\xc2\xb5", + "\xc3\xb6", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc2\xa1", + "\xc2\xbf", + "\x40", + "\xc3\x9d", + "\x5b", + "\xc2\xae", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa5", + "\xc2\xb7", + "\xc2\xa9", + "\xc2\xa7", + "\xc2\xb6", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xac", + "\x7c", + "\xc2\xaf", + "\xc2\xa8", + "\x5c", + "\xc3\x97", + "\xc3\x9e", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\x7e", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb5", + "\xc3\xa6", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbf", + "\xc2\xb4", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\x5e", + "\xc3\x92", + "\xc3\x93", + "\xc3\x95", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\xac", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\xae", + 0x0000005c => "\xbe", + 0x0000005d => "\x9e", + 0x0000005e => "\xec", + 0x0000005f => "\x6d", + 0x00000060 => "\x8c", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\x8e", + 0x0000007c => "\xbb", + 0x0000007d => "\x9c", + 0x0000007e => "\xcc", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000a1 => "\xaa", + 0x000000a2 => "\xb0", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a5 => "\xb2", + 0x000000a6 => "\x6a", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000a9 => "\xb4", + 0x000000aa => "\x9a", + 0x000000ab => "\x8a", + 0x000000ac => "\xba", + 0x000000ad => "\xca", + 0x000000ae => "\xaf", + 0x000000af => "\xbc", + 0x000000b0 => "\x90", + 0x000000b1 => "\x8f", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xe0", + 0x000000b5 => "\xa0", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb3", + 0x000000b8 => "\x9d", + 0x000000b9 => "\xda", + 0x000000ba => "\x9b", + 0x000000bb => "\x8b", + 0x000000bc => "\xb7", + 0x000000bd => "\xb8", + 0x000000be => "\xb9", + 0x000000bf => "\xab", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c3 => "\x66", + 0x000000c4 => "\x63", + 0x000000c5 => "\x67", + 0x000000c6 => "\x5a", + 0x000000c7 => "\x68", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d0 => "\x7c", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d5 => "\xef", + 0x000000d6 => "\x5f", + 0x000000d7 => "\xbf", + 0x000000d8 => "\x80", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\xfc", + 0x000000dd => "\xad", + 0x000000de => "\xc0", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e3 => "\x46", + 0x000000e4 => "\x43", + 0x000000e5 => "\x47", + 0x000000e6 => "\xd0", + 0x000000e7 => "\x48", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f0 => "\x79", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f5 => "\xcf", + 0x000000f6 => "\xa1", + 0x000000f7 => "\xe1", + 0x000000f8 => "\x70", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xdc", + 0x000000fd => "\x8d", + 0x000000fe => "\x4a", + 0x000000ff => "\xdf", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM871 - Conversion routines for IBM871 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM871. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP871 + alias EBCDIC-CP-IS + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 46 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 47 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 48 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 000000C6 | LATIN CAPITAL LETTER AE + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 66 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 67 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 68 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8B | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 8C | 00000060 | GRAVE ACCENT + 8D | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + 8E | 0000007B | LEFT CURLY BRACKET + 8F | 000000B1 | PLUS-MINUS SIGN + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000000AA | FEMININE ORDINAL INDICATOR + 9B | 000000BA | MASCULINE ORDINAL INDICATOR + 9C | 0000007D | RIGHT CURLY BRACKET + 9D | 000000B8 | CEDILLA + 9E | 0000005D | RIGHT SQUARE BRACKET + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000000A1 | INVERTED EXCLAMATION MARK + AB | 000000BF | INVERTED QUESTION MARK + AC | 00000040 | COMMERCIAL AT + AD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + AE | 0000005B | LEFT SQUARE BRACKET + AF | 000000AE | REGISTERED SIGN + B0 | 000000A2 | CENT SIGN + B1 | 000000A3 | POUND SIGN + B2 | 000000A5 | YEN SIGN + B3 | 000000B7 | MIDDLE DOT + B4 | 000000A9 | COPYRIGHT SIGN + B5 | 000000A7 | SECTION SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000BC | VULGAR FRACTION ONE QUARTER + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 000000BE | VULGAR FRACTION THREE QUARTERS + BA | 000000AC | NOT SIGN + BB | 0000007C | VERTICAL LINE + BC | 000000AF | MACRON + BD | 000000A8 | DIAERESIS + BE | 0000005C | REVERSE SOLIDUS + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 0000007E | TILDE + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + D0 | 000000E6 | LATIN SMALL LETTER AE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B9 | SUPERSCRIPT ONE + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + DF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + E0 | 000000B4 | ACUTE ACCENT + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 0000005E | CIRCUMFLEX ACCENT + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM874.pm b/lib/Locale/RecodeData/IBM874.pm new file mode 100644 index 0000000..31b8407 --- /dev/null +++ b/lib/Locale/RecodeData/IBM874.pm @@ -0,0 +1,1077 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM874. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM874; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x20ac, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x2026, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a0, + 0x0e01, + 0x0e02, + 0x0e03, + 0x0e04, + 0x0e05, + 0x0e06, + 0x0e07, + 0x0e08, + 0x0e09, + 0x0e0a, + 0x0e0b, + 0x0e0c, + 0x0e0d, + 0x0e0e, + 0x0e0f, + 0x0e10, + 0x0e11, + 0x0e12, + 0x0e13, + 0x0e14, + 0x0e15, + 0x0e16, + 0x0e17, + 0x0e18, + 0x0e19, + 0x0e1a, + 0x0e1b, + 0x0e1c, + 0x0e1d, + 0x0e1e, + 0x0e1f, + 0x0e20, + 0x0e21, + 0x0e22, + 0x0e23, + 0x0e24, + 0x0e25, + 0x0e26, + 0x0e27, + 0x0e28, + 0x0e29, + 0x0e2a, + 0x0e2b, + 0x0e2c, + 0x0e2d, + 0x0e2e, + 0x0e2f, + 0x0e30, + 0x0e31, + 0x0e32, + 0x0e33, + 0x0e34, + 0x0e35, + 0x0e36, + 0x0e37, + 0x0e38, + 0x0e39, + 0x0e3a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0e3f, + 0x0e40, + 0x0e41, + 0x0e42, + 0x0e43, + 0x0e44, + 0x0e45, + 0x0e46, + 0x0e47, + 0x0e48, + 0x0e49, + 0x0e4a, + 0x0e4b, + 0x0e4c, + 0x0e4d, + 0x0e4e, + 0x0e4f, + 0x0e50, + 0x0e51, + 0x0e52, + 0x0e53, + 0x0e54, + 0x0e55, + 0x0e56, + 0x0e57, + 0x0e58, + 0x0e59, + 0x0e5a, + 0x0e5b, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x82\xac", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\xa6", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa0", + "\xe0\xb8\x81", + "\xe0\xb8\x82", + "\xe0\xb8\x83", + "\xe0\xb8\x84", + "\xe0\xb8\x85", + "\xe0\xb8\x86", + "\xe0\xb8\x87", + "\xe0\xb8\x88", + "\xe0\xb8\x89", + "\xe0\xb8\x8a", + "\xe0\xb8\x8b", + "\xe0\xb8\x8c", + "\xe0\xb8\x8d", + "\xe0\xb8\x8e", + "\xe0\xb8\x8f", + "\xe0\xb8\x90", + "\xe0\xb8\x91", + "\xe0\xb8\x92", + "\xe0\xb8\x93", + "\xe0\xb8\x94", + "\xe0\xb8\x95", + "\xe0\xb8\x96", + "\xe0\xb8\x97", + "\xe0\xb8\x98", + "\xe0\xb8\x99", + "\xe0\xb8\x9a", + "\xe0\xb8\x9b", + "\xe0\xb8\x9c", + "\xe0\xb8\x9d", + "\xe0\xb8\x9e", + "\xe0\xb8\x9f", + "\xe0\xb8\xa0", + "\xe0\xb8\xa1", + "\xe0\xb8\xa2", + "\xe0\xb8\xa3", + "\xe0\xb8\xa4", + "\xe0\xb8\xa5", + "\xe0\xb8\xa6", + "\xe0\xb8\xa7", + "\xe0\xb8\xa8", + "\xe0\xb8\xa9", + "\xe0\xb8\xaa", + "\xe0\xb8\xab", + "\xe0\xb8\xac", + "\xe0\xb8\xad", + "\xe0\xb8\xae", + "\xe0\xb8\xaf", + "\xe0\xb8\xb0", + "\xe0\xb8\xb1", + "\xe0\xb8\xb2", + "\xe0\xb8\xb3", + "\xe0\xb8\xb4", + "\xe0\xb8\xb5", + "\xe0\xb8\xb6", + "\xe0\xb8\xb7", + "\xe0\xb8\xb8", + "\xe0\xb8\xb9", + "\xe0\xb8\xba", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe0\xb8\xbf", + "\xe0\xb9\x80", + "\xe0\xb9\x81", + "\xe0\xb9\x82", + "\xe0\xb9\x83", + "\xe0\xb9\x84", + "\xe0\xb9\x85", + "\xe0\xb9\x86", + "\xe0\xb9\x87", + "\xe0\xb9\x88", + "\xe0\xb9\x89", + "\xe0\xb9\x8a", + "\xe0\xb9\x8b", + "\xe0\xb9\x8c", + "\xe0\xb9\x8d", + "\xe0\xb9\x8e", + "\xe0\xb9\x8f", + "\xe0\xb9\x90", + "\xe0\xb9\x91", + "\xe0\xb9\x92", + "\xe0\xb9\x93", + "\xe0\xb9\x94", + "\xe0\xb9\x95", + "\xe0\xb9\x96", + "\xe0\xb9\x97", + "\xe0\xb9\x98", + "\xe0\xb9\x99", + "\xe0\xb9\x9a", + "\xe0\xb9\x9b", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x00000e01 => "\xa1", + 0x00000e02 => "\xa2", + 0x00000e03 => "\xa3", + 0x00000e04 => "\xa4", + 0x00000e05 => "\xa5", + 0x00000e06 => "\xa6", + 0x00000e07 => "\xa7", + 0x00000e08 => "\xa8", + 0x00000e09 => "\xa9", + 0x00000e0a => "\xaa", + 0x00000e0b => "\xab", + 0x00000e0c => "\xac", + 0x00000e0d => "\xad", + 0x00000e0e => "\xae", + 0x00000e0f => "\xaf", + 0x00000e10 => "\xb0", + 0x00000e11 => "\xb1", + 0x00000e12 => "\xb2", + 0x00000e13 => "\xb3", + 0x00000e14 => "\xb4", + 0x00000e15 => "\xb5", + 0x00000e16 => "\xb6", + 0x00000e17 => "\xb7", + 0x00000e18 => "\xb8", + 0x00000e19 => "\xb9", + 0x00000e1a => "\xba", + 0x00000e1b => "\xbb", + 0x00000e1c => "\xbc", + 0x00000e1d => "\xbd", + 0x00000e1e => "\xbe", + 0x00000e1f => "\xbf", + 0x00000e20 => "\xc0", + 0x00000e21 => "\xc1", + 0x00000e22 => "\xc2", + 0x00000e23 => "\xc3", + 0x00000e24 => "\xc4", + 0x00000e25 => "\xc5", + 0x00000e26 => "\xc6", + 0x00000e27 => "\xc7", + 0x00000e28 => "\xc8", + 0x00000e29 => "\xc9", + 0x00000e2a => "\xca", + 0x00000e2b => "\xcb", + 0x00000e2c => "\xcc", + 0x00000e2d => "\xcd", + 0x00000e2e => "\xce", + 0x00000e2f => "\xcf", + 0x00000e30 => "\xd0", + 0x00000e31 => "\xd1", + 0x00000e32 => "\xd2", + 0x00000e33 => "\xd3", + 0x00000e34 => "\xd4", + 0x00000e35 => "\xd5", + 0x00000e36 => "\xd6", + 0x00000e37 => "\xd7", + 0x00000e38 => "\xd8", + 0x00000e39 => "\xd9", + 0x00000e3a => "\xda", + 0x00000e3f => "\xdf", + 0x00000e40 => "\xe0", + 0x00000e41 => "\xe1", + 0x00000e42 => "\xe2", + 0x00000e43 => "\xe3", + 0x00000e44 => "\xe4", + 0x00000e45 => "\xe5", + 0x00000e46 => "\xe6", + 0x00000e47 => "\xe7", + 0x00000e48 => "\xe8", + 0x00000e49 => "\xe9", + 0x00000e4a => "\xea", + 0x00000e4b => "\xeb", + 0x00000e4c => "\xec", + 0x00000e4d => "\xed", + 0x00000e4e => "\xee", + 0x00000e4f => "\xef", + 0x00000e50 => "\xf0", + 0x00000e51 => "\xf1", + 0x00000e52 => "\xf2", + 0x00000e53 => "\xf3", + 0x00000e54 => "\xf4", + 0x00000e55 => "\xf5", + 0x00000e56 => "\xf6", + 0x00000e57 => "\xf7", + 0x00000e58 => "\xf8", + 0x00000e59 => "\xf9", + 0x00000e5a => "\xfa", + 0x00000e5b => "\xfb", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x000020ac => "\x80", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM874 - Conversion routines for IBM874 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM874. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + automatically generated from the charDB + alias CP874 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 000020AC | EURO SIGN + 85 | 00002026 | HORIZONTAL ELLIPSIS + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000E01 | THAI CHARACTER KO KAI + A2 | 00000E02 | THAI CHARACTER KHO KHAI + A3 | 00000E03 | THAI CHARACTER KHO KHUAT + A4 | 00000E04 | THAI CHARACTER KHO KHWAI + A5 | 00000E05 | THAI CHARACTER KHO KHON + A6 | 00000E06 | THAI CHARACTER KHO RAKHANG + A7 | 00000E07 | THAI CHARACTER NGO NGU + A8 | 00000E08 | THAI CHARACTER CHO CHAN + A9 | 00000E09 | THAI CHARACTER CHO CHING + AA | 00000E0A | THAI CHARACTER CHO CHANG + AB | 00000E0B | THAI CHARACTER SO SO + AC | 00000E0C | THAI CHARACTER CHO CHOE + AD | 00000E0D | THAI CHARACTER YO YING + AE | 00000E0E | THAI CHARACTER DO CHADA + AF | 00000E0F | THAI CHARACTER TO PATAK + B0 | 00000E10 | THAI CHARACTER THO THAN + B1 | 00000E11 | THAI CHARACTER THO NANGMONTHO + B2 | 00000E12 | THAI CHARACTER THO PHUTHAO + B3 | 00000E13 | THAI CHARACTER NO NEN + B4 | 00000E14 | THAI CHARACTER DO DEK + B5 | 00000E15 | THAI CHARACTER TO TAO + B6 | 00000E16 | THAI CHARACTER THO THUNG + B7 | 00000E17 | THAI CHARACTER THO THAHAN + B8 | 00000E18 | THAI CHARACTER THO THONG + B9 | 00000E19 | THAI CHARACTER NO NU + BA | 00000E1A | THAI CHARACTER BO BAIMAI + BB | 00000E1B | THAI CHARACTER PO PLA + BC | 00000E1C | THAI CHARACTER PHO PHUNG + BD | 00000E1D | THAI CHARACTER FO FA + BE | 00000E1E | THAI CHARACTER PHO PHAN + BF | 00000E1F | THAI CHARACTER FO FAN + C0 | 00000E20 | THAI CHARACTER PHO SAMPHAO + C1 | 00000E21 | THAI CHARACTER MO MA + C2 | 00000E22 | THAI CHARACTER YO YAK + C3 | 00000E23 | THAI CHARACTER RO RUA + C4 | 00000E24 | THAI CHARACTER RU + C5 | 00000E25 | THAI CHARACTER LO LING + C6 | 00000E26 | THAI CHARACTER LU + C7 | 00000E27 | THAI CHARACTER WO WAEN + C8 | 00000E28 | THAI CHARACTER SO SALA + C9 | 00000E29 | THAI CHARACTER SO RUSI + CA | 00000E2A | THAI CHARACTER SO SUA + CB | 00000E2B | THAI CHARACTER HO HIP + CC | 00000E2C | THAI CHARACTER LO CHULA + CD | 00000E2D | THAI CHARACTER O ANG + CE | 00000E2E | THAI CHARACTER HO NOKHUK + CF | 00000E2F | THAI CHARACTER PAIYANNOI + D0 | 00000E30 | THAI CHARACTER SARA A + D1 | 00000E31 | THAI CHARACTER MAI HAN-AKAT + D2 | 00000E32 | THAI CHARACTER SARA AA + D3 | 00000E33 | THAI CHARACTER SARA AM + D4 | 00000E34 | THAI CHARACTER SARA I + D5 | 00000E35 | THAI CHARACTER SARA II + D6 | 00000E36 | THAI CHARACTER SARA UE + D7 | 00000E37 | THAI CHARACTER SARA UEE + D8 | 00000E38 | THAI CHARACTER SARA U + D9 | 00000E39 | THAI CHARACTER SARA UU + DA | 00000E3A | THAI CHARACTER PHINTHU + DF | 00000E3F | THAI CURRENCY SYMBOL BAHT + E0 | 00000E40 | THAI CHARACTER SARA E + E1 | 00000E41 | THAI CHARACTER SARA AE + E2 | 00000E42 | THAI CHARACTER SARA O + E3 | 00000E43 | THAI CHARACTER SARA AI MAIMUAN + E4 | 00000E44 | THAI CHARACTER SARA AI MAIMALAI + E5 | 00000E45 | THAI CHARACTER LAKKHANGYAO + E6 | 00000E46 | THAI CHARACTER MAIYAMOK + E7 | 00000E47 | THAI CHARACTER MAITAIKHU + E8 | 00000E48 | THAI CHARACTER MAI EK + E9 | 00000E49 | THAI CHARACTER MAI THO + EA | 00000E4A | THAI CHARACTER MAI TRI + EB | 00000E4B | THAI CHARACTER MAI CHATTAWA + EC | 00000E4C | THAI CHARACTER THANTHAKHAT + ED | 00000E4D | THAI CHARACTER NIKHAHIT + EE | 00000E4E | THAI CHARACTER YAMAKKAN + EF | 00000E4F | THAI CHARACTER FONGMAN + F0 | 00000E50 | THAI DIGIT ZERO + F1 | 00000E51 | THAI DIGIT ONE + F2 | 00000E52 | THAI DIGIT TWO + F3 | 00000E53 | THAI DIGIT THREE + F4 | 00000E54 | THAI DIGIT FOUR + F5 | 00000E55 | THAI DIGIT FIVE + F6 | 00000E56 | THAI DIGIT SIX + F7 | 00000E57 | THAI DIGIT SEVEN + F8 | 00000E58 | THAI DIGIT EIGHT + F9 | 00000E59 | THAI DIGIT NINE + FA | 00000E5A | THAI CHARACTER ANGKHANKHU + FB | 00000E5B | THAI CHARACTER KHOMUT + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM875.pm b/lib/Locale/RecodeData/IBM875.pm new file mode 100644 index 0000000..68f1c06 --- /dev/null +++ b/lib/Locale/RecodeData/IBM875.pm @@ -0,0 +1,1127 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM875. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM875; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x0391, + 0x0392, + 0x0393, + 0x0394, + 0x0395, + 0x0396, + 0x0397, + 0x0398, + 0x0399, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x039e, + 0x039f, + 0x03a0, + 0x03a1, + 0x03a3, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x03a4, + 0x03a5, + 0x03a6, + 0x03a7, + 0x03a8, + 0x03a9, + 0x03aa, + 0x03ab, + 0xfffd, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x00a8, + 0x0386, + 0x0388, + 0x0389, + 0x2207, + 0x038a, + 0x038c, + 0x038e, + 0x038f, + 0x0060, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x0385, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x03b1, + 0x03b2, + 0x03b3, + 0x03b4, + 0x03b5, + 0x03b6, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x03b7, + 0x03b8, + 0x03b9, + 0x03ba, + 0x03bb, + 0x03bc, + 0x00b4, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x03bd, + 0x03be, + 0x03bf, + 0x03c0, + 0x03c1, + 0x03c3, + 0x00a3, + 0x03ac, + 0x03ad, + 0x03ae, + 0x0390, + 0x03af, + 0x03cc, + 0x03cd, + 0x03b0, + 0x03ce, + 0x03c2, + 0x03c4, + 0x03c5, + 0x03c6, + 0x03c7, + 0x03c8, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x03c9, + 0x03ca, + 0x03cb, + 0x2018, + 0x2015, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x00b1, + 0x00bd, + 0xfffd, + 0x00b7, + 0x2019, + 0x00a6, + 0x005c, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00a7, + 0xfffd, + 0xfffd, + 0x00ab, + 0x00ac, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00a9, + 0xfffd, + 0xfffd, + 0x00bb, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xce\x91", + "\xce\x92", + "\xce\x93", + "\xce\x94", + "\xce\x95", + "\xce\x96", + "\xce\x97", + "\xce\x98", + "\xce\x99", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xce\x9e", + "\xce\x9f", + "\xce\xa0", + "\xce\xa1", + "\xce\xa3", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xce\xa4", + "\xce\xa5", + "\xce\xa6", + "\xce\xa7", + "\xce\xa8", + "\xce\xa9", + "\xce\xaa", + "\xce\xab", + "\xef\xbf\xbd", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xc2\xa8", + "\xce\x86", + "\xce\x88", + "\xce\x89", + "\xe2\x88\x87", + "\xce\x8a", + "\xce\x8c", + "\xce\x8e", + "\xce\x8f", + "\x60", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xce\x85", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xce\xb4", + "\xce\xb5", + "\xce\xb6", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xc2\xb4", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xce\xbd", + "\xce\xbe", + "\xce\xbf", + "\xcf\x80", + "\xcf\x81", + "\xcf\x83", + "\xc2\xa3", + "\xce\xac", + "\xce\xad", + "\xce\xae", + "\xce\x90", + "\xce\xaf", + "\xcf\x8c", + "\xcf\x8d", + "\xce\xb0", + "\xcf\x8e", + "\xcf\x82", + "\xcf\x84", + "\xcf\x85", + "\xcf\x86", + "\xcf\x87", + "\xcf\x88", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xcf\x89", + "\xcf\x8a", + "\xcf\x8b", + "\xe2\x80\x98", + "\xe2\x80\x95", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xc2\xb1", + "\xc2\xbd", + "\xef\xbf\xbd", + "\xc2\xb7", + "\xe2\x80\x99", + "\xc2\xa6", + "\x5c", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc2\xa7", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xab", + "\xc2\xac", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc2\xa9", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xbb", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005c => "\xe0", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x79", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a3 => "\xb0", + 0x000000a6 => "\xdf", + 0x000000a7 => "\xeb", + 0x000000a8 => "\x70", + 0x000000a9 => "\xfb", + 0x000000ab => "\xee", + 0x000000ac => "\xef", + 0x000000ad => "\xca", + 0x000000b0 => "\x90", + 0x000000b1 => "\xda", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xa0", + 0x000000b7 => "\xdd", + 0x000000bb => "\xfe", + 0x000000bd => "\xdb", + 0x00000385 => "\x80", + 0x00000386 => "\x71", + 0x00000388 => "\x72", + 0x00000389 => "\x73", + 0x0000038a => "\x75", + 0x0000038c => "\x76", + 0x0000038e => "\x77", + 0x0000038f => "\x78", + 0x00000390 => "\xb4", + 0x00000391 => "\x41", + 0x00000392 => "\x42", + 0x00000393 => "\x43", + 0x00000394 => "\x44", + 0x00000395 => "\x45", + 0x00000396 => "\x46", + 0x00000397 => "\x47", + 0x00000398 => "\x48", + 0x00000399 => "\x49", + 0x0000039a => "\x51", + 0x0000039b => "\x52", + 0x0000039c => "\x53", + 0x0000039d => "\x54", + 0x0000039e => "\x55", + 0x0000039f => "\x56", + 0x000003a0 => "\x57", + 0x000003a1 => "\x58", + 0x000003a3 => "\x59", + 0x000003a4 => "\x62", + 0x000003a5 => "\x63", + 0x000003a6 => "\x64", + 0x000003a7 => "\x65", + 0x000003a8 => "\x66", + 0x000003a9 => "\x67", + 0x000003aa => "\x68", + 0x000003ab => "\x69", + 0x000003ac => "\xb1", + 0x000003ad => "\xb2", + 0x000003ae => "\xb3", + 0x000003af => "\xb5", + 0x000003b0 => "\xb8", + 0x000003b1 => "\x8a", + 0x000003b2 => "\x8b", + 0x000003b3 => "\x8c", + 0x000003b4 => "\x8d", + 0x000003b5 => "\x8e", + 0x000003b6 => "\x8f", + 0x000003b7 => "\x9a", + 0x000003b8 => "\x9b", + 0x000003b9 => "\x9c", + 0x000003ba => "\x9d", + 0x000003bb => "\x9e", + 0x000003bc => "\x9f", + 0x000003bd => "\xaa", + 0x000003be => "\xab", + 0x000003bf => "\xac", + 0x000003c0 => "\xad", + 0x000003c1 => "\xae", + 0x000003c2 => "\xba", + 0x000003c3 => "\xaf", + 0x000003c4 => "\xbb", + 0x000003c5 => "\xbc", + 0x000003c6 => "\xbd", + 0x000003c7 => "\xbe", + 0x000003c8 => "\xbf", + 0x000003c9 => "\xcb", + 0x000003ca => "\xcc", + 0x000003cb => "\xcd", + 0x000003cc => "\xb6", + 0x000003cd => "\xb7", + 0x000003ce => "\xb9", + 0x00002015 => "\xcf", + 0x00002018 => "\xce", + 0x00002019 => "\xde", + 0x00002207 => "\x74", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM875 - Conversion routines for IBM875 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM875. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: UNICODE 1.0 + alias CP875 + alias EBCDIC-GREEK + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 00000391 | GREEK CAPITAL LETTER ALPHA + 42 | 00000392 | GREEK CAPITAL LETTER BETA + 43 | 00000393 | GREEK CAPITAL LETTER GAMMA + 44 | 00000394 | GREEK CAPITAL LETTER DELTA + 45 | 00000395 | GREEK CAPITAL LETTER EPSILON + 46 | 00000396 | GREEK CAPITAL LETTER ZETA + 47 | 00000397 | GREEK CAPITAL LETTER ETA + 48 | 00000398 | GREEK CAPITAL LETTER THETA + 49 | 00000399 | GREEK CAPITAL LETTER IOTA + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 0000039A | GREEK CAPITAL LETTER KAPPA + 52 | 0000039B | GREEK CAPITAL LETTER LAMDA + 53 | 0000039C | GREEK CAPITAL LETTER MU + 54 | 0000039D | GREEK CAPITAL LETTER NU + 55 | 0000039E | GREEK CAPITAL LETTER XI + 56 | 0000039F | GREEK CAPITAL LETTER OMICRON + 57 | 000003A0 | GREEK CAPITAL LETTER PI + 58 | 000003A1 | GREEK CAPITAL LETTER RHO + 59 | 000003A3 | GREEK CAPITAL LETTER SIGMA + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000003A4 | GREEK CAPITAL LETTER TAU + 63 | 000003A5 | GREEK CAPITAL LETTER UPSILON + 64 | 000003A6 | GREEK CAPITAL LETTER PHI + 65 | 000003A7 | GREEK CAPITAL LETTER CHI + 66 | 000003A8 | GREEK CAPITAL LETTER PSI + 67 | 000003A9 | GREEK CAPITAL LETTER OMEGA + 68 | 000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 69 | 000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 000000A8 | DIAERESIS + 71 | 00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS + 72 | 00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS + 73 | 00000389 | GREEK CAPITAL LETTER ETA WITH TONOS + 74 | 00002207 | NABLA + 75 | 0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS + 76 | 0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS + 77 | 0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS + 78 | 0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS + 79 | 00000060 | GRAVE ACCENT + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 00000385 | GREEK DIALYTIKA TONOS + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 000003B1 | GREEK SMALL LETTER ALPHA + 8B | 000003B2 | GREEK SMALL LETTER BETA + 8C | 000003B3 | GREEK SMALL LETTER GAMMA + 8D | 000003B4 | GREEK SMALL LETTER DELTA + 8E | 000003B5 | GREEK SMALL LETTER EPSILON + 8F | 000003B6 | GREEK SMALL LETTER ZETA + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 000003B7 | GREEK SMALL LETTER ETA + 9B | 000003B8 | GREEK SMALL LETTER THETA + 9C | 000003B9 | GREEK SMALL LETTER IOTA + 9D | 000003BA | GREEK SMALL LETTER KAPPA + 9E | 000003BB | GREEK SMALL LETTER LAMDA + 9F | 000003BC | GREEK SMALL LETTER MU + A0 | 000000B4 | ACUTE ACCENT + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 000003BD | GREEK SMALL LETTER NU + AB | 000003BE | GREEK SMALL LETTER XI + AC | 000003BF | GREEK SMALL LETTER OMICRON + AD | 000003C0 | GREEK SMALL LETTER PI + AE | 000003C1 | GREEK SMALL LETTER RHO + AF | 000003C3 | GREEK SMALL LETTER SIGMA + B0 | 000000A3 | POUND SIGN + B1 | 000003AC | GREEK SMALL LETTER ALPHA WITH TONOS + B2 | 000003AD | GREEK SMALL LETTER EPSILON WITH TONOS + B3 | 000003AE | GREEK SMALL LETTER ETA WITH TONOS + B4 | 00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + B5 | 000003AF | GREEK SMALL LETTER IOTA WITH TONOS + B6 | 000003CC | GREEK SMALL LETTER OMICRON WITH TONOS + B7 | 000003CD | GREEK SMALL LETTER UPSILON WITH TONOS + B8 | 000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + B9 | 000003CE | GREEK SMALL LETTER OMEGA WITH TONOS + BA | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + BB | 000003C4 | GREEK SMALL LETTER TAU + BC | 000003C5 | GREEK SMALL LETTER UPSILON + BD | 000003C6 | GREEK SMALL LETTER PHI + BE | 000003C7 | GREEK SMALL LETTER CHI + BF | 000003C8 | GREEK SMALL LETTER PSI + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000003C9 | GREEK SMALL LETTER OMEGA + CC | 000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA + CD | 000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA + CE | 00002018 | LEFT SINGLE QUOTATION MARK + CF | 00002015 | HORIZONTAL BAR + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 000000B1 | PLUS-MINUS SIGN + DB | 000000BD | VULGAR FRACTION ONE HALF + DD | 000000B7 | MIDDLE DOT + DE | 00002019 | RIGHT SINGLE QUOTATION MARK + DF | 000000A6 | BROKEN BAR + E0 | 0000005C | REVERSE SOLIDUS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000A7 | SECTION SIGN + EE | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + EF | 000000AC | NOT SIGN + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000A9 | COPYRIGHT SIGN + FE | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM880.pm b/lib/Locale/RecodeData/IBM880.pm new file mode 100644 index 0000000..a0064f6 --- /dev/null +++ b/lib/Locale/RecodeData/IBM880.pm @@ -0,0 +1,1121 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM880. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM880; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0x0452, + 0x0453, + 0x0451, + 0xfffd, + 0x0455, + 0x0456, + 0x0457, + 0x0458, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x0459, + 0x045a, + 0x045b, + 0x045c, + 0xfffd, + 0x045f, + 0x042a, + 0x2116, + 0x0402, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x0403, + 0x0401, + 0xfffd, + 0x0405, + 0x0406, + 0x0407, + 0x0408, + 0x0409, + 0x00a6, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x040a, + 0x040b, + 0x040c, + 0xfffd, + 0xfffd, + 0x040f, + 0x044e, + 0x0430, + 0x0431, + 0xfffd, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0x0446, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x0434, + 0x0435, + 0x0444, + 0x0433, + 0x0445, + 0x0438, + 0x0439, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x043a, + 0x043b, + 0x043c, + 0x043d, + 0x043e, + 0x043f, + 0x044f, + 0xfffd, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x0440, + 0x0441, + 0x0442, + 0x0443, + 0x0436, + 0x0432, + 0x044c, + 0x044b, + 0x0437, + 0x0448, + 0x044d, + 0x0449, + 0x0447, + 0x044a, + 0x042e, + 0x0410, + 0x0411, + 0x0426, + 0x0414, + 0x0415, + 0x0424, + 0x0413, + 0xfffd, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x0425, + 0x0418, + 0x0419, + 0x041a, + 0x041b, + 0x041c, + 0xfffd, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x041d, + 0x041e, + 0x041f, + 0x042f, + 0x0420, + 0x0421, + 0x005c, + 0x00a4, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x0422, + 0x0423, + 0x0416, + 0x0412, + 0x042c, + 0x042b, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x0417, + 0x0428, + 0x042d, + 0x0429, + 0x0427, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xd1\x92", + "\xd1\x93", + "\xd1\x91", + "\xef\xbf\xbd", + "\xd1\x95", + "\xd1\x96", + "\xd1\x97", + "\xd1\x98", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xd1\x99", + "\xd1\x9a", + "\xd1\x9b", + "\xd1\x9c", + "\xef\xbf\xbd", + "\xd1\x9f", + "\xd0\xaa", + "\xe2\x84\x96", + "\xd0\x82", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xd0\x83", + "\xd0\x81", + "\xef\xbf\xbd", + "\xd0\x85", + "\xd0\x86", + "\xd0\x87", + "\xd0\x88", + "\xd0\x89", + "\xc2\xa6", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xd0\x8a", + "\xd0\x8b", + "\xd0\x8c", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd0\x8f", + "\xd1\x8e", + "\xd0\xb0", + "\xd0\xb1", + "\xef\xbf\xbd", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xd1\x86", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xd0\xb4", + "\xd0\xb5", + "\xd1\x84", + "\xd0\xb3", + "\xd1\x85", + "\xd0\xb8", + "\xd0\xb9", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x8f", + "\xef\xbf\xbd", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd0\xb6", + "\xd0\xb2", + "\xd1\x8c", + "\xd1\x8b", + "\xd0\xb7", + "\xd1\x88", + "\xd1\x8d", + "\xd1\x89", + "\xd1\x87", + "\xd1\x8a", + "\xd0\xae", + "\xd0\x90", + "\xd0\x91", + "\xd0\xa6", + "\xd0\x94", + "\xd0\x95", + "\xd0\xa4", + "\xd0\x93", + "\xef\xbf\xbd", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xd0\xa5", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xef\xbf\xbd", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xaf", + "\xd0\xa0", + "\xd0\xa1", + "\x5c", + "\xc2\xa4", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\x96", + "\xd0\x92", + "\xd0\xac", + "\xd0\xab", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xd0\x97", + "\xd0\xa8", + "\xd0\xad", + "\xd0\xa9", + "\xd0\xa7", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005c => "\xe0", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a4 => "\xe1", + 0x000000a6 => "\x6a", + 0x00000401 => "\x63", + 0x00000402 => "\x59", + 0x00000403 => "\x62", + 0x00000405 => "\x65", + 0x00000406 => "\x66", + 0x00000407 => "\x67", + 0x00000408 => "\x68", + 0x00000409 => "\x69", + 0x0000040a => "\x70", + 0x0000040b => "\x71", + 0x0000040c => "\x72", + 0x0000040f => "\x75", + 0x00000410 => "\xb9", + 0x00000411 => "\xba", + 0x00000412 => "\xed", + 0x00000413 => "\xbf", + 0x00000414 => "\xbc", + 0x00000415 => "\xbd", + 0x00000416 => "\xec", + 0x00000417 => "\xfa", + 0x00000418 => "\xcb", + 0x00000419 => "\xcc", + 0x0000041a => "\xcd", + 0x0000041b => "\xce", + 0x0000041c => "\xcf", + 0x0000041d => "\xda", + 0x0000041e => "\xdb", + 0x0000041f => "\xdc", + 0x00000420 => "\xde", + 0x00000421 => "\xdf", + 0x00000422 => "\xea", + 0x00000423 => "\xeb", + 0x00000424 => "\xbe", + 0x00000425 => "\xca", + 0x00000426 => "\xbb", + 0x00000427 => "\xfe", + 0x00000428 => "\xfb", + 0x00000429 => "\xfd", + 0x0000042a => "\x57", + 0x0000042b => "\xef", + 0x0000042c => "\xee", + 0x0000042d => "\xfc", + 0x0000042e => "\xb8", + 0x0000042f => "\xdd", + 0x00000430 => "\x77", + 0x00000431 => "\x78", + 0x00000432 => "\xaf", + 0x00000433 => "\x8d", + 0x00000434 => "\x8a", + 0x00000435 => "\x8b", + 0x00000436 => "\xae", + 0x00000437 => "\xb2", + 0x00000438 => "\x8f", + 0x00000439 => "\x90", + 0x0000043a => "\x9a", + 0x0000043b => "\x9b", + 0x0000043c => "\x9c", + 0x0000043d => "\x9d", + 0x0000043e => "\x9e", + 0x0000043f => "\x9f", + 0x00000440 => "\xaa", + 0x00000441 => "\xab", + 0x00000442 => "\xac", + 0x00000443 => "\xad", + 0x00000444 => "\x8c", + 0x00000445 => "\x8e", + 0x00000446 => "\x80", + 0x00000447 => "\xb6", + 0x00000448 => "\xb3", + 0x00000449 => "\xb5", + 0x0000044a => "\xb7", + 0x0000044b => "\xb1", + 0x0000044c => "\xb0", + 0x0000044d => "\xb4", + 0x0000044e => "\x76", + 0x0000044f => "\xa0", + 0x00000451 => "\x44", + 0x00000452 => "\x42", + 0x00000453 => "\x43", + 0x00000455 => "\x46", + 0x00000456 => "\x47", + 0x00000457 => "\x48", + 0x00000458 => "\x49", + 0x00000459 => "\x51", + 0x0000045a => "\x52", + 0x0000045b => "\x53", + 0x0000045c => "\x54", + 0x0000045f => "\x56", + 0x00002116 => "\x58", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM880 - Conversion routines for IBM880 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM880. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP880 + alias EBCDIC-CYRILLIC + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 42 | 00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian) + 43 | 00000453 | CYRILLIC SMALL LETTER GJE + 44 | 00000451 | CYRILLIC SMALL LETTER IO + 46 | 00000455 | CYRILLIC SMALL LETTER DZE + 47 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 48 | 00000457 | CYRILLIC SMALL LETTER YI (Ukrainian) + 49 | 00000458 | CYRILLIC SMALL LETTER JE + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 00000459 | CYRILLIC SMALL LETTER LJE + 52 | 0000045A | CYRILLIC SMALL LETTER NJE + 53 | 0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian) + 54 | 0000045C | CYRILLIC SMALL LETTER KJE + 56 | 0000045F | CYRILLIC SMALL LETTER DZHE + 57 | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + 58 | 00002116 | NUMERO SIGN + 59 | 00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian) + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 00000403 | CYRILLIC CAPITAL LETTER GJE + 63 | 00000401 | CYRILLIC CAPITAL LETTER IO + 65 | 00000405 | CYRILLIC CAPITAL LETTER DZE + 66 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 67 | 00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian) + 68 | 00000408 | CYRILLIC CAPITAL LETTER JE + 69 | 00000409 | CYRILLIC CAPITAL LETTER LJE + 6A | 000000A6 | BROKEN BAR + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 0000040A | CYRILLIC CAPITAL LETTER NJE + 71 | 0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) + 72 | 0000040C | CYRILLIC CAPITAL LETTER KJE + 75 | 0000040F | CYRILLIC CAPITAL LETTER DZHE + 76 | 0000044E | CYRILLIC SMALL LETTER YU + 77 | 00000430 | CYRILLIC SMALL LETTER A + 78 | 00000431 | CYRILLIC SMALL LETTER BE + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 00000446 | CYRILLIC SMALL LETTER TSE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 00000434 | CYRILLIC SMALL LETTER DE + 8B | 00000435 | CYRILLIC SMALL LETTER IE + 8C | 00000444 | CYRILLIC SMALL LETTER EF + 8D | 00000433 | CYRILLIC SMALL LETTER GHE + 8E | 00000445 | CYRILLIC SMALL LETTER HA + 8F | 00000438 | CYRILLIC SMALL LETTER I + 90 | 00000439 | CYRILLIC SMALL LETTER SHORT I + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 0000043A | CYRILLIC SMALL LETTER KA + 9B | 0000043B | CYRILLIC SMALL LETTER EL + 9C | 0000043C | CYRILLIC SMALL LETTER EM + 9D | 0000043D | CYRILLIC SMALL LETTER EN + 9E | 0000043E | CYRILLIC SMALL LETTER O + 9F | 0000043F | CYRILLIC SMALL LETTER PE + A0 | 0000044F | CYRILLIC SMALL LETTER YA + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 00000440 | CYRILLIC SMALL LETTER ER + AB | 00000441 | CYRILLIC SMALL LETTER ES + AC | 00000442 | CYRILLIC SMALL LETTER TE + AD | 00000443 | CYRILLIC SMALL LETTER U + AE | 00000436 | CYRILLIC SMALL LETTER ZHE + AF | 00000432 | CYRILLIC SMALL LETTER VE + B0 | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + B1 | 0000044B | CYRILLIC SMALL LETTER YERU + B2 | 00000437 | CYRILLIC SMALL LETTER ZE + B3 | 00000448 | CYRILLIC SMALL LETTER SHA + B4 | 0000044D | CYRILLIC SMALL LETTER E + B5 | 00000449 | CYRILLIC SMALL LETTER SHCHA + B6 | 00000447 | CYRILLIC SMALL LETTER CHE + B7 | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + B8 | 0000042E | CYRILLIC CAPITAL LETTER YU + B9 | 00000410 | CYRILLIC CAPITAL LETTER A + BA | 00000411 | CYRILLIC CAPITAL LETTER BE + BB | 00000426 | CYRILLIC CAPITAL LETTER TSE + BC | 00000414 | CYRILLIC CAPITAL LETTER DE + BD | 00000415 | CYRILLIC CAPITAL LETTER IE + BE | 00000424 | CYRILLIC CAPITAL LETTER EF + BF | 00000413 | CYRILLIC CAPITAL LETTER GHE + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 00000425 | CYRILLIC CAPITAL LETTER HA + CB | 00000418 | CYRILLIC CAPITAL LETTER I + CC | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + CD | 0000041A | CYRILLIC CAPITAL LETTER KA + CE | 0000041B | CYRILLIC CAPITAL LETTER EL + CF | 0000041C | CYRILLIC CAPITAL LETTER EM + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 0000041D | CYRILLIC CAPITAL LETTER EN + DB | 0000041E | CYRILLIC CAPITAL LETTER O + DC | 0000041F | CYRILLIC CAPITAL LETTER PE + DD | 0000042F | CYRILLIC CAPITAL LETTER YA + DE | 00000420 | CYRILLIC CAPITAL LETTER ER + DF | 00000421 | CYRILLIC CAPITAL LETTER ES + E0 | 0000005C | REVERSE SOLIDUS + E1 | 000000A4 | CURRENCY SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 00000422 | CYRILLIC CAPITAL LETTER TE + EB | 00000423 | CYRILLIC CAPITAL LETTER U + EC | 00000416 | CYRILLIC CAPITAL LETTER ZHE + ED | 00000412 | CYRILLIC CAPITAL LETTER VE + EE | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + EF | 0000042B | CYRILLIC CAPITAL LETTER YERU + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 00000417 | CYRILLIC CAPITAL LETTER ZE + FB | 00000428 | CYRILLIC CAPITAL LETTER SHA + FC | 0000042D | CYRILLIC CAPITAL LETTER E + FD | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + FE | 00000427 | CYRILLIC CAPITAL LETTER CHE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM891.pm b/lib/Locale/RecodeData/IBM891.pm new file mode 100644 index 0000000..cf74735 --- /dev/null +++ b/lib/Locale/RecodeData/IBM891.pm @@ -0,0 +1,884 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM891. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM891; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM891 - Conversion routines for IBM891 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM891. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP891 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM903.pm b/lib/Locale/RecodeData/IBM903.pm new file mode 100644 index 0000000..1c4f950 --- /dev/null +++ b/lib/Locale/RecodeData/IBM903.pm @@ -0,0 +1,884 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM903. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM903; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM903 - Conversion routines for IBM903 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM903. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP903 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM904.pm b/lib/Locale/RecodeData/IBM904.pm new file mode 100644 index 0000000..f899c02 --- /dev/null +++ b/lib/Locale/RecodeData/IBM904.pm @@ -0,0 +1,891 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM904. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM904; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00a2, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00ac, + 0x00a6, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\xa2", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xac", + "\xc2\xa6", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a2 => "\x80", + 0x000000a6 => "\xfe", + 0x000000ac => "\xfd", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM904 - Conversion routines for IBM904 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM904. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP904 + alias 904 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000A2 | CENT SIGN + FD | 000000AC | NOT SIGN + FE | 000000A6 | BROKEN BAR + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM905.pm b/lib/Locale/RecodeData/IBM905.pm new file mode 100644 index 0000000..f1e2c88 --- /dev/null +++ b/lib/Locale/RecodeData/IBM905.pm @@ -0,0 +1,1123 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM905. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM905; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0xfffd, + 0x00e2, + 0x00e4, + 0x00e0, + 0x00e1, + 0xfffd, + 0x010b, + 0x007b, + 0x00f1, + 0x00c7, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00e8, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00ec, + 0x00df, + 0x011e, + 0x0130, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0x00c2, + 0x00c4, + 0x00c0, + 0x00c1, + 0xfffd, + 0x010a, + 0x005b, + 0x00d1, + 0x015f, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0xfffd, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x0131, + 0x003a, + 0x00d6, + 0x015e, + 0x0027, + 0x003d, + 0x00dc, + 0x02d8, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x0127, + 0x0109, + 0x015d, + 0x016d, + 0xfffd, + 0x007c, + 0x00b0, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x0125, + 0x011d, + 0x0135, + 0x02db, + 0xfffd, + 0x00a4, + 0x00b5, + 0x00f6, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0x0126, + 0x0108, + 0x015c, + 0x016c, + 0xfffd, + 0x0040, + 0x00b7, + 0x00a3, + 0x017c, + 0x007d, + 0x017b, + 0x00a7, + 0x005d, + 0xfffd, + 0x00bd, + 0x0024, + 0x0124, + 0x011c, + 0x0134, + 0x00a8, + 0x00b4, + 0x00d7, + 0x00e7, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0x00f4, + 0x007e, + 0x00f2, + 0x00f3, + 0x0121, + 0x011f, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0x0060, + 0x00fb, + 0x005c, + 0x00f9, + 0x00fa, + 0xfffd, + 0x00fc, + 0x00f7, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x00b2, + 0x00d4, + 0x0023, + 0x00d2, + 0x00d3, + 0x0120, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x00b3, + 0x00db, + 0x0022, + 0x00d9, + 0x00da, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xef\xbf\xbd", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa0", + "\xc3\xa1", + "\xef\xbf\xbd", + "\xc4\x8b", + "\x7b", + "\xc3\xb1", + "\xc3\x87", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xa8", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xac", + "\xc3\x9f", + "\xc4\x9e", + "\xc4\xb0", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xc3\x82", + "\xc3\x84", + "\xc3\x80", + "\xc3\x81", + "\xef\xbf\xbd", + "\xc4\x8a", + "\x5b", + "\xc3\x91", + "\xc5\x9f", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xef\xbf\xbd", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc4\xb1", + "\x3a", + "\xc3\x96", + "\xc5\x9e", + "\x27", + "\x3d", + "\xc3\x9c", + "\xcb\x98", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xc4\xa7", + "\xc4\x89", + "\xc5\x9d", + "\xc5\xad", + "\xef\xbf\xbd", + "\x7c", + "\xc2\xb0", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xc4\xa5", + "\xc4\x9d", + "\xc4\xb5", + "\xcb\x9b", + "\xef\xbf\xbd", + "\xc2\xa4", + "\xc2\xb5", + "\xc3\xb6", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc4\xa6", + "\xc4\x88", + "\xc5\x9c", + "\xc5\xac", + "\xef\xbf\xbd", + "\x40", + "\xc2\xb7", + "\xc2\xa3", + "\xc5\xbc", + "\x7d", + "\xc5\xbb", + "\xc2\xa7", + "\x5d", + "\xef\xbf\xbd", + "\xc2\xbd", + "\x24", + "\xc4\xa4", + "\xc4\x9c", + "\xc4\xb4", + "\xc2\xa8", + "\xc2\xb4", + "\xc3\x97", + "\xc3\xa7", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xc3\xb4", + "\x7e", + "\xc3\xb2", + "\xc3\xb3", + "\xc4\xa1", + "\xc4\x9f", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x60", + "\xc3\xbb", + "\x5c", + "\xc3\xb9", + "\xc3\xba", + "\xef\xbf\xbd", + "\xc3\xbc", + "\xc3\xb7", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc2\xb2", + "\xc3\x94", + "\x23", + "\xc3\x92", + "\xc3\x93", + "\xc4\xa0", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xc2\xb3", + "\xc3\x9b", + "\x22", + "\xc3\x99", + "\xc3\x9a", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\xfc", + 0x00000023 => "\xec", + 0x00000024 => "\xb9", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\xaf", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x68", + 0x0000005c => "\xdc", + 0x0000005d => "\xb6", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\xda", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\x48", + 0x0000007c => "\x8f", + 0x0000007d => "\xb3", + 0x0000007e => "\xcc", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a3 => "\xb1", + 0x000000a4 => "\x9f", + 0x000000a7 => "\xb5", + 0x000000a8 => "\xbd", + 0x000000ad => "\xca", + 0x000000b0 => "\x90", + 0x000000b2 => "\xea", + 0x000000b3 => "\xfa", + 0x000000b4 => "\xbe", + 0x000000b5 => "\xa0", + 0x000000b7 => "\xb0", + 0x000000bd => "\xb8", + 0x000000c0 => "\x64", + 0x000000c1 => "\x65", + 0x000000c2 => "\x62", + 0x000000c4 => "\x63", + 0x000000c7 => "\x4a", + 0x000000c8 => "\x74", + 0x000000c9 => "\x71", + 0x000000ca => "\x72", + 0x000000cb => "\x73", + 0x000000cc => "\x78", + 0x000000cd => "\x75", + 0x000000ce => "\x76", + 0x000000cf => "\x77", + 0x000000d1 => "\x69", + 0x000000d2 => "\xed", + 0x000000d3 => "\xee", + 0x000000d4 => "\xeb", + 0x000000d6 => "\x7b", + 0x000000d7 => "\xbf", + 0x000000d9 => "\xfd", + 0x000000da => "\xfe", + 0x000000db => "\xfb", + 0x000000dc => "\x7f", + 0x000000df => "\x59", + 0x000000e0 => "\x44", + 0x000000e1 => "\x45", + 0x000000e2 => "\x42", + 0x000000e4 => "\x43", + 0x000000e7 => "\xc0", + 0x000000e8 => "\x54", + 0x000000e9 => "\x51", + 0x000000ea => "\x52", + 0x000000eb => "\x53", + 0x000000ec => "\x58", + 0x000000ed => "\x55", + 0x000000ee => "\x56", + 0x000000ef => "\x57", + 0x000000f1 => "\x49", + 0x000000f2 => "\xcd", + 0x000000f3 => "\xce", + 0x000000f4 => "\xcb", + 0x000000f6 => "\xa1", + 0x000000f7 => "\xe1", + 0x000000f9 => "\xdd", + 0x000000fa => "\xde", + 0x000000fb => "\xdb", + 0x000000fc => "\xe0", + 0x00000108 => "\xab", + 0x00000109 => "\x8b", + 0x0000010a => "\x67", + 0x0000010b => "\x47", + 0x0000011c => "\xbb", + 0x0000011d => "\x9b", + 0x0000011e => "\x5a", + 0x0000011f => "\xd0", + 0x00000120 => "\xef", + 0x00000121 => "\xcf", + 0x00000124 => "\xba", + 0x00000125 => "\x9a", + 0x00000126 => "\xaa", + 0x00000127 => "\x8a", + 0x00000130 => "\x5b", + 0x00000131 => "\x79", + 0x00000134 => "\xbc", + 0x00000135 => "\x9c", + 0x0000015c => "\xac", + 0x0000015d => "\x8c", + 0x0000015e => "\x7c", + 0x0000015f => "\x6a", + 0x0000016c => "\xad", + 0x0000016d => "\x8d", + 0x0000017b => "\xb4", + 0x0000017c => "\xb2", + 0x000002d8 => "\x80", + 0x000002db => "\x9d", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM905 - Conversion routines for IBM905 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM905. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + alias CP905 + alias EBCDIC-CP-TR + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 42 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 43 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 44 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 45 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 47 | 0000010B | LATIN SMALL LETTER C WITH DOT ABOVE + 48 | 0000007B | LEFT CURLY BRACKET + 49 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 4A | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 52 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 53 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 54 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 55 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 56 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 57 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 58 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 59 | 000000DF | LATIN SMALL LETTER SHARP S (German) + 5A | 0000011E | LATIN CAPITAL LETTER G WITH BREVE + 5B | 00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 63 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 64 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 65 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 67 | 0000010A | LATIN CAPITAL LETTER C WITH DOT ABOVE + 68 | 0000005B | LEFT SQUARE BRACKET + 69 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 6A | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 71 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 72 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 73 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 74 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 75 | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 76 | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 77 | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 78 | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 79 | 00000131 | LATIN SMALL LETTER DOTLESS I + 7A | 0000003A | COLON + 7B | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 7C | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 80 | 000002D8 | BREVE + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 00000127 | LATIN SMALL LETTER H WITH STROKE + 8B | 00000109 | LATIN SMALL LETTER C WITH CIRCUMFLEX + 8C | 0000015D | LATIN SMALL LETTER S WITH CIRCUMFLEX + 8D | 0000016D | LATIN SMALL LETTER U WITH BREVE + 8F | 0000007C | VERTICAL LINE + 90 | 000000B0 | DEGREE SIGN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 00000125 | LATIN SMALL LETTER H WITH CIRCUMFLEX + 9B | 0000011D | LATIN SMALL LETTER G WITH CIRCUMFLEX + 9C | 00000135 | LATIN SMALL LETTER J WITH CIRCUMFLEX + 9D | 000002DB | OGONEK + 9F | 000000A4 | CURRENCY SIGN + A0 | 000000B5 | MICRO SIGN + A1 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 00000126 | LATIN CAPITAL LETTER H WITH STROKE + AB | 00000108 | LATIN CAPITAL LETTER C WITH CIRCUMFLEX + AC | 0000015C | LATIN CAPITAL LETTER S WITH CIRCUMFLEX + AD | 0000016C | LATIN CAPITAL LETTER U WITH BREVE + AF | 00000040 | COMMERCIAL AT + B0 | 000000B7 | MIDDLE DOT + B1 | 000000A3 | POUND SIGN + B2 | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + B3 | 0000007D | RIGHT CURLY BRACKET + B4 | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + B5 | 000000A7 | SECTION SIGN + B6 | 0000005D | RIGHT SQUARE BRACKET + B8 | 000000BD | VULGAR FRACTION ONE HALF + B9 | 00000024 | DOLLAR SIGN + BA | 00000124 | LATIN CAPITAL LETTER H WITH CIRCUMFLEX + BB | 0000011C | LATIN CAPITAL LETTER G WITH CIRCUMFLEX + BC | 00000134 | LATIN CAPITAL LETTER J WITH CIRCUMFLEX + BD | 000000A8 | DIAERESIS + BE | 000000B4 | ACUTE ACCENT + BF | 000000D7 | MULTIPLICATION SIGN + C0 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CB | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + CC | 0000007E | TILDE + CD | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + CE | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + CF | 00000121 | LATIN SMALL LETTER G WITH DOT ABOVE + D0 | 0000011F | LATIN SMALL LETTER G WITH BREVE + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 00000060 | GRAVE ACCENT + DB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + DC | 0000005C | REVERSE SOLIDUS + DD | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + DE | 000000FA | LATIN SMALL LETTER U WITH ACUTE + E0 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + E1 | 000000F7 | DIVISION SIGN + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 000000B2 | SUPERSCRIPT TWO + EB | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + EC | 00000023 | NUMBER SIGN + ED | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 00000120 | LATIN CAPITAL LETTER G WITH DOT ABOVE + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FA | 000000B3 | SUPERSCRIPT THREE + FB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + FC | 00000022 | QUOTATION MARK + FD | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + FE | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IBM918.pm b/lib/Locale/RecodeData/IBM918.pm new file mode 100644 index 0000000..4dfc897 --- /dev/null +++ b/lib/Locale/RecodeData/IBM918.pm @@ -0,0 +1,1089 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IBM918. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IBM918; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x009c, + 0x0009, + 0x0086, + 0x007f, + 0x0097, + 0x008d, + 0x008e, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x009d, + 0x0085, + 0x0008, + 0x0087, + 0x0018, + 0x0019, + 0x0092, + 0x008f, + 0x001c, + 0x001d, + 0x001e, + 0x001f, + 0x0080, + 0x0081, + 0x0082, + 0x0083, + 0x0084, + 0x000a, + 0x0017, + 0x001b, + 0x0088, + 0x0089, + 0x008a, + 0x008b, + 0x008c, + 0x0005, + 0x0006, + 0x0007, + 0x0090, + 0x0091, + 0x0016, + 0x0093, + 0x0094, + 0x0095, + 0x0096, + 0x0004, + 0x0098, + 0x0099, + 0x009a, + 0x009b, + 0x0014, + 0x0015, + 0x009e, + 0x001a, + 0x0020, + 0x00a0, + 0x060c, + 0x061b, + 0x061f, + 0x0623, + 0x0627, + 0xfe8e, + 0xfffd, + 0x0628, + 0x005b, + 0x002e, + 0x003c, + 0x0028, + 0x002b, + 0x0021, + 0x0026, + 0xfe91, + 0x067e, + 0xfffd, + 0x0629, + 0x062a, + 0xfe97, + 0xfffd, + 0xfffd, + 0x062b, + 0x005d, + 0x0024, + 0x002a, + 0x0029, + 0x003b, + 0x005e, + 0x002d, + 0x002f, + 0xfe9b, + 0x062c, + 0xfe9f, + 0xfffd, + 0xfffd, + 0x062d, + 0xfea3, + 0x062e, + 0x0060, + 0x002c, + 0x0025, + 0x005f, + 0x003e, + 0x003f, + 0x0660, + 0x0661, + 0x0662, + 0x0663, + 0x0664, + 0x0665, + 0x0666, + 0x0667, + 0x0668, + 0x0669, + 0x003a, + 0x0023, + 0x0040, + 0x0027, + 0x003d, + 0x0022, + 0xfea7, + 0x0061, + 0x0062, + 0x0063, + 0x0064, + 0x0065, + 0x0066, + 0x0067, + 0x0068, + 0x0069, + 0x062f, + 0xfffd, + 0x0630, + 0x0631, + 0xfffd, + 0x0632, + 0xfffd, + 0x006a, + 0x006b, + 0x006c, + 0x006d, + 0x006e, + 0x006f, + 0x0070, + 0x0071, + 0x0072, + 0x0633, + 0xfeb3, + 0x0634, + 0xfeb7, + 0x0635, + 0xfebb, + 0x0636, + 0x007e, + 0x0073, + 0x0074, + 0x0075, + 0x0076, + 0x0077, + 0x0078, + 0x0079, + 0x007a, + 0xfebf, + 0x0637, + 0x0638, + 0x0639, + 0xfeca, + 0xfecb, + 0xfecc, + 0x063a, + 0xfece, + 0xfecf, + 0xfed0, + 0x0641, + 0xfed3, + 0x0642, + 0xfed7, + 0x0643, + 0xfedb, + 0x007c, + 0xfffd, + 0xfffd, + 0x0644, + 0xfede, + 0x007b, + 0x0041, + 0x0042, + 0x0043, + 0x0044, + 0x0045, + 0x0046, + 0x0047, + 0x0048, + 0x0049, + 0x00ad, + 0xfffd, + 0x0645, + 0xfee3, + 0xfffd, + 0x0646, + 0x007d, + 0x004a, + 0x004b, + 0x004c, + 0x004d, + 0x004e, + 0x004f, + 0x0050, + 0x0051, + 0x0052, + 0xfee7, + 0xfffd, + 0x0648, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005c, + 0xfffd, + 0x0053, + 0x0054, + 0x0055, + 0x0056, + 0x0057, + 0x0058, + 0x0059, + 0x005a, + 0x0621, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0651, + 0xfe7d, + 0x009f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\xc2\x9c", + "\x09", + "\xc2\x86", + "\x7f", + "\xc2\x97", + "\xc2\x8d", + "\xc2\x8e", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xc2\x9d", + "\xc2\x85", + "\x08", + "\xc2\x87", + "\x18", + "\x19", + "\xc2\x92", + "\xc2\x8f", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\x0a", + "\x17", + "\x1b", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\x05", + "\x06", + "\x07", + "\xc2\x90", + "\xc2\x91", + "\x16", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\x04", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\x14", + "\x15", + "\xc2\x9e", + "\x1a", + "\x20", + "\xc2\xa0", + "\xd8\x8c", + "\xd8\x9b", + "\xd8\x9f", + "\xd8\xa3", + "\xd8\xa7", + "\xef\xba\x8e", + "\xef\xbf\xbd", + "\xd8\xa8", + "\x5b", + "\x2e", + "\x3c", + "\x28", + "\x2b", + "\x21", + "\x26", + "\xef\xba\x91", + "\xd9\xbe", + "\xef\xbf\xbd", + "\xd8\xa9", + "\xd8\xaa", + "\xef\xba\x97", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\xab", + "\x5d", + "\x24", + "\x2a", + "\x29", + "\x3b", + "\x5e", + "\x2d", + "\x2f", + "\xef\xba\x9b", + "\xd8\xac", + "\xef\xba\x9f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\xad", + "\xef\xba\xa3", + "\xd8\xae", + "\x60", + "\x2c", + "\x25", + "\x5f", + "\x3e", + "\x3f", + "\xd9\xa0", + "\xd9\xa1", + "\xd9\xa2", + "\xd9\xa3", + "\xd9\xa4", + "\xd9\xa5", + "\xd9\xa6", + "\xd9\xa7", + "\xd9\xa8", + "\xd9\xa9", + "\x3a", + "\x23", + "\x40", + "\x27", + "\x3d", + "\x22", + "\xef\xba\xa7", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\xd8\xaf", + "\xef\xbf\xbd", + "\xd8\xb0", + "\xd8\xb1", + "\xef\xbf\xbd", + "\xd8\xb2", + "\xef\xbf\xbd", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\xd8\xb3", + "\xef\xba\xb3", + "\xd8\xb4", + "\xef\xba\xb7", + "\xd8\xb5", + "\xef\xba\xbb", + "\xd8\xb6", + "\x7e", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xba\xbf", + "\xd8\xb7", + "\xd8\xb8", + "\xd8\xb9", + "\xef\xbb\x8a", + "\xef\xbb\x8b", + "\xef\xbb\x8c", + "\xd8\xba", + "\xef\xbb\x8e", + "\xef\xbb\x8f", + "\xef\xbb\x90", + "\xd9\x81", + "\xef\xbb\x93", + "\xd9\x82", + "\xef\xbb\x97", + "\xd9\x83", + "\xef\xbb\x9b", + "\x7c", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd9\x84", + "\xef\xbb\x9e", + "\x7b", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\xc2\xad", + "\xef\xbf\xbd", + "\xd9\x85", + "\xef\xbb\xa3", + "\xef\xbf\xbd", + "\xd9\x86", + "\x7d", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\xef\xbb\xa7", + "\xef\xbf\xbd", + "\xd9\x88", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5c", + "\xef\xbf\xbd", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xd8\xa1", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd9\x91", + "\xef\xb9\xbd", + "\xc2\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x37", + 0x00000005 => "\x2d", + 0x00000006 => "\x2e", + 0x00000007 => "\x2f", + 0x00000008 => "\x16", + 0x00000009 => "\x05", + 0x0000000a => "\x25", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x3c", + 0x00000015 => "\x3d", + 0x00000016 => "\x32", + 0x00000017 => "\x26", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x3f", + 0x0000001b => "\x27", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x40", + 0x00000021 => "\x4f", + 0x00000022 => "\x7f", + 0x00000023 => "\x7b", + 0x00000024 => "\x5b", + 0x00000025 => "\x6c", + 0x00000026 => "\x50", + 0x00000027 => "\x7d", + 0x00000028 => "\x4d", + 0x00000029 => "\x5d", + 0x0000002a => "\x5c", + 0x0000002b => "\x4e", + 0x0000002c => "\x6b", + 0x0000002d => "\x60", + 0x0000002e => "\x4b", + 0x0000002f => "\x61", + 0x00000030 => "\xf0", + 0x00000031 => "\xf1", + 0x00000032 => "\xf2", + 0x00000033 => "\xf3", + 0x00000034 => "\xf4", + 0x00000035 => "\xf5", + 0x00000036 => "\xf6", + 0x00000037 => "\xf7", + 0x00000038 => "\xf8", + 0x00000039 => "\xf9", + 0x0000003a => "\x7a", + 0x0000003b => "\x5e", + 0x0000003c => "\x4c", + 0x0000003d => "\x7e", + 0x0000003e => "\x6e", + 0x0000003f => "\x6f", + 0x00000040 => "\x7c", + 0x00000041 => "\xc1", + 0x00000042 => "\xc2", + 0x00000043 => "\xc3", + 0x00000044 => "\xc4", + 0x00000045 => "\xc5", + 0x00000046 => "\xc6", + 0x00000047 => "\xc7", + 0x00000048 => "\xc8", + 0x00000049 => "\xc9", + 0x0000004a => "\xd1", + 0x0000004b => "\xd2", + 0x0000004c => "\xd3", + 0x0000004d => "\xd4", + 0x0000004e => "\xd5", + 0x0000004f => "\xd6", + 0x00000050 => "\xd7", + 0x00000051 => "\xd8", + 0x00000052 => "\xd9", + 0x00000053 => "\xe2", + 0x00000054 => "\xe3", + 0x00000055 => "\xe4", + 0x00000056 => "\xe5", + 0x00000057 => "\xe6", + 0x00000058 => "\xe7", + 0x00000059 => "\xe8", + 0x0000005a => "\xe9", + 0x0000005b => "\x4a", + 0x0000005c => "\xe0", + 0x0000005d => "\x5a", + 0x0000005e => "\x5f", + 0x0000005f => "\x6d", + 0x00000060 => "\x6a", + 0x00000061 => "\x81", + 0x00000062 => "\x82", + 0x00000063 => "\x83", + 0x00000064 => "\x84", + 0x00000065 => "\x85", + 0x00000066 => "\x86", + 0x00000067 => "\x87", + 0x00000068 => "\x88", + 0x00000069 => "\x89", + 0x0000006a => "\x91", + 0x0000006b => "\x92", + 0x0000006c => "\x93", + 0x0000006d => "\x94", + 0x0000006e => "\x95", + 0x0000006f => "\x96", + 0x00000070 => "\x97", + 0x00000071 => "\x98", + 0x00000072 => "\x99", + 0x00000073 => "\xa2", + 0x00000074 => "\xa3", + 0x00000075 => "\xa4", + 0x00000076 => "\xa5", + 0x00000077 => "\xa6", + 0x00000078 => "\xa7", + 0x00000079 => "\xa8", + 0x0000007a => "\xa9", + 0x0000007b => "\xc0", + 0x0000007c => "\xbb", + 0x0000007d => "\xd0", + 0x0000007e => "\xa1", + 0x0000007f => "\x07", + 0x00000080 => "\x20", + 0x00000081 => "\x21", + 0x00000082 => "\x22", + 0x00000083 => "\x23", + 0x00000084 => "\x24", + 0x00000085 => "\x15", + 0x00000086 => "\x06", + 0x00000087 => "\x17", + 0x00000088 => "\x28", + 0x00000089 => "\x29", + 0x0000008a => "\x2a", + 0x0000008b => "\x2b", + 0x0000008c => "\x2c", + 0x0000008d => "\x09", + 0x0000008e => "\x0a", + 0x0000008f => "\x1b", + 0x00000090 => "\x30", + 0x00000091 => "\x31", + 0x00000092 => "\x1a", + 0x00000093 => "\x33", + 0x00000094 => "\x34", + 0x00000095 => "\x35", + 0x00000096 => "\x36", + 0x00000097 => "\x08", + 0x00000098 => "\x38", + 0x00000099 => "\x39", + 0x0000009a => "\x3a", + 0x0000009b => "\x3b", + 0x0000009c => "\x04", + 0x0000009d => "\x14", + 0x0000009e => "\x3e", + 0x0000009f => "\xff", + 0x000000a0 => "\x41", + 0x000000ad => "\xca", + 0x0000060c => "\x42", + 0x0000061b => "\x43", + 0x0000061f => "\x44", + 0x00000621 => "\xea", + 0x00000623 => "\x45", + 0x00000627 => "\x46", + 0x00000628 => "\x49", + 0x00000629 => "\x54", + 0x0000062a => "\x55", + 0x0000062b => "\x59", + 0x0000062c => "\x63", + 0x0000062d => "\x67", + 0x0000062e => "\x69", + 0x0000062f => "\x8a", + 0x00000630 => "\x8c", + 0x00000631 => "\x8d", + 0x00000632 => "\x8f", + 0x00000633 => "\x9a", + 0x00000634 => "\x9c", + 0x00000635 => "\x9e", + 0x00000636 => "\xa0", + 0x00000637 => "\xab", + 0x00000638 => "\xac", + 0x00000639 => "\xad", + 0x0000063a => "\xb1", + 0x00000641 => "\xb5", + 0x00000642 => "\xb7", + 0x00000643 => "\xb9", + 0x00000644 => "\xbe", + 0x00000645 => "\xcc", + 0x00000646 => "\xcf", + 0x00000648 => "\xdc", + 0x00000651 => "\xfd", + 0x00000660 => "\x70", + 0x00000661 => "\x71", + 0x00000662 => "\x72", + 0x00000663 => "\x73", + 0x00000664 => "\x74", + 0x00000665 => "\x75", + 0x00000666 => "\x76", + 0x00000667 => "\x77", + 0x00000668 => "\x78", + 0x00000669 => "\x79", + 0x0000067e => "\x52", + 0x0000fe7d => "\xfe", + 0x0000fe8e => "\x47", + 0x0000fe91 => "\x51", + 0x0000fe97 => "\x56", + 0x0000fe9b => "\x62", + 0x0000fe9f => "\x64", + 0x0000fea3 => "\x68", + 0x0000fea7 => "\x80", + 0x0000feb3 => "\x9b", + 0x0000feb7 => "\x9d", + 0x0000febb => "\x9f", + 0x0000febf => "\xaa", + 0x0000feca => "\xae", + 0x0000fecb => "\xaf", + 0x0000fecc => "\xb0", + 0x0000fece => "\xb2", + 0x0000fecf => "\xb3", + 0x0000fed0 => "\xb4", + 0x0000fed3 => "\xb6", + 0x0000fed7 => "\xb8", + 0x0000fedb => "\xba", + 0x0000fede => "\xbf", + 0x0000fee3 => "\xcd", + 0x0000fee7 => "\xda", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IBM918 - Conversion routines for IBM918 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IBM918. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: IBM NLS RM Vol2 SE09-8002-01, March 1990 + alias CP918 + alias EBCDIC-CP-AR2 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 0000009C | STRING TERMINATOR (ST) + 05 | 00000009 | CHARACTER TABULATION (HT) + 06 | 00000086 | START OF SELECTED AREA (SSA) + 07 | 0000007F | DELETE (DEL) + 08 | 00000097 | END OF GUARDED AREA (EPA) + 09 | 0000008D | REVERSE LINE FEED (RI) + 0A | 0000008E | SINGLE-SHIFT TWO (SS2) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 15 | 00000085 | NEXT LINE (NEL) + 16 | 00000008 | BACKSPACE (BS) + 17 | 00000087 | END OF SELECTED AREA (ESA) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 00000092 | PRIVATE USE TWO (PU2) + 1B | 0000008F | SINGLE-SHIFT THREE (SS3) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000080 | PADDING CHARACTER (PAD) + 21 | 00000081 | HIGH OCTET PRESET (HOP) + 22 | 00000082 | BREAK PERMITTED HERE (BPH) + 23 | 00000083 | NO BREAK HERE (NBH) + 24 | 00000084 | INDEX (IND) + 25 | 0000000A | LINE FEED (LF) + 26 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 27 | 0000001B | ESCAPE (ESC) + 28 | 00000088 | CHARACTER TABULATION SET (HTS) + 29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 2A | 0000008A | LINE TABULATION SET (VTS) + 2B | 0000008B | PARTIAL LINE FORWARD (PLD) + 2C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 2D | 00000005 | ENQUIRY (ENQ) + 2E | 00000006 | ACKNOWLEDGE (ACK) + 2F | 00000007 | BELL (BEL) + 30 | 00000090 | DEVICE CONTROL STRING (DCS) + 31 | 00000091 | PRIVATE USE ONE (PU1) + 32 | 00000016 | SYNCHRONOUS IDLE (SYN) + 33 | 00000093 | SET TRANSMIT STATE (STS) + 34 | 00000094 | CANCEL CHARACTER (CCH) + 35 | 00000095 | MESSAGE WAITING (MW) + 36 | 00000096 | START OF GUARDED AREA (SPA) + 37 | 00000004 | END OF TRANSMISSION (EOT) + 38 | 00000098 | START OF STRING (SOS) + 39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 3C | 00000014 | DEVICE CONTROL FOUR (DC4) + 3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 3E | 0000009E | PRIVACY MESSAGE (PM) + 3F | 0000001A | SUBSTITUTE (SUB) + 40 | 00000020 | SPACE + 41 | 000000A0 | NO-BREAK SPACE + 42 | 0000060C | ARABIC COMMA + 43 | 0000061B | ARABIC SEMICOLON + 44 | 0000061F | ARABIC QUESTION MARK + 45 | 00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE + 46 | 00000627 | ARABIC LETTER ALEF + 47 | 0000FE8E | ARABIC LETTER ALEF FINAL FORM + 49 | 00000628 | ARABIC LETTER BEH + 4A | 0000005B | LEFT SQUARE BRACKET + 4B | 0000002E | FULL STOP + 4C | 0000003C | LESS-THAN SIGN + 4D | 00000028 | LEFT PARENTHESIS + 4E | 0000002B | PLUS SIGN + 4F | 00000021 | EXCLAMATION MARK + 50 | 00000026 | AMPERSAND + 51 | 0000FE91 | ARABIC LETTER BEH INITIAL FORM + 52 | 0000067E | ARABIC LETTER PEH + 54 | 00000629 | ARABIC LETTER TEH MARBUTA + 55 | 0000062A | ARABIC LETTER TEH + 56 | 0000FE97 | ARABIC LETTER TEH INITIAL FORM + 59 | 0000062B | ARABIC LETTER THEH + 5A | 0000005D | RIGHT SQUARE BRACKET + 5B | 00000024 | DOLLAR SIGN + 5C | 0000002A | ASTERISK + 5D | 00000029 | RIGHT PARENTHESIS + 5E | 0000003B | SEMICOLON + 5F | 0000005E | CIRCUMFLEX ACCENT + 60 | 0000002D | HYPHEN-MINUS + 61 | 0000002F | SOLIDUS + 62 | 0000FE9B | ARABIC LETTER THEH INITIAL FORM + 63 | 0000062C | ARABIC LETTER JEEM + 64 | 0000FE9F | ARABIC LETTER JEEM INITIAL FORM + 67 | 0000062D | ARABIC LETTER HAH + 68 | 0000FEA3 | ARABIC LETTER HAH INITIAL FORM + 69 | 0000062E | ARABIC LETTER KHAH + 6A | 00000060 | GRAVE ACCENT + 6B | 0000002C | COMMA + 6C | 00000025 | PERCENT SIGN + 6D | 0000005F | LOW LINE + 6E | 0000003E | GREATER-THAN SIGN + 6F | 0000003F | QUESTION MARK + 70 | 00000660 | ARABIC-INDIC DIGIT ZERO + 71 | 00000661 | ARABIC-INDIC DIGIT ONE + 72 | 00000662 | ARABIC-INDIC DIGIT TWO + 73 | 00000663 | ARABIC-INDIC DIGIT THREE + 74 | 00000664 | ARABIC-INDIC DIGIT FOUR + 75 | 00000665 | ARABIC-INDIC DIGIT FIVE + 76 | 00000666 | ARABIC-INDIC DIGIT SIX + 77 | 00000667 | ARABIC-INDIC DIGIT SEVEN + 78 | 00000668 | ARABIC-INDIC DIGIT EIGHT + 79 | 00000669 | ARABIC-INDIC DIGIT NINE + 7A | 0000003A | COLON + 7B | 00000023 | NUMBER SIGN + 7C | 00000040 | COMMERCIAL AT + 7D | 00000027 | APOSTROPHE + 7E | 0000003D | EQUALS SIGN + 7F | 00000022 | QUOTATION MARK + 80 | 0000FEA7 | ARABIC LETTER KHAH INITIAL FORM + 81 | 00000061 | LATIN SMALL LETTER A + 82 | 00000062 | LATIN SMALL LETTER B + 83 | 00000063 | LATIN SMALL LETTER C + 84 | 00000064 | LATIN SMALL LETTER D + 85 | 00000065 | LATIN SMALL LETTER E + 86 | 00000066 | LATIN SMALL LETTER F + 87 | 00000067 | LATIN SMALL LETTER G + 88 | 00000068 | LATIN SMALL LETTER H + 89 | 00000069 | LATIN SMALL LETTER I + 8A | 0000062F | ARABIC LETTER DAL + 8C | 00000630 | ARABIC LETTER THAL + 8D | 00000631 | ARABIC LETTER REH + 8F | 00000632 | ARABIC LETTER ZAIN + 91 | 0000006A | LATIN SMALL LETTER J + 92 | 0000006B | LATIN SMALL LETTER K + 93 | 0000006C | LATIN SMALL LETTER L + 94 | 0000006D | LATIN SMALL LETTER M + 95 | 0000006E | LATIN SMALL LETTER N + 96 | 0000006F | LATIN SMALL LETTER O + 97 | 00000070 | LATIN SMALL LETTER P + 98 | 00000071 | LATIN SMALL LETTER Q + 99 | 00000072 | LATIN SMALL LETTER R + 9A | 00000633 | ARABIC LETTER SEEN + 9B | 0000FEB3 | ARABIC LETTER SEEN INITIAL FORM + 9C | 00000634 | ARABIC LETTER SHEEN + 9D | 0000FEB7 | ARABIC LETTER SHEEN INITIAL FORM + 9E | 00000635 | ARABIC LETTER SAD + 9F | 0000FEBB | ARABIC LETTER SAD INITIAL FORM + A0 | 00000636 | ARABIC LETTER DAD + A1 | 0000007E | TILDE + A2 | 00000073 | LATIN SMALL LETTER S + A3 | 00000074 | LATIN SMALL LETTER T + A4 | 00000075 | LATIN SMALL LETTER U + A5 | 00000076 | LATIN SMALL LETTER V + A6 | 00000077 | LATIN SMALL LETTER W + A7 | 00000078 | LATIN SMALL LETTER X + A8 | 00000079 | LATIN SMALL LETTER Y + A9 | 0000007A | LATIN SMALL LETTER Z + AA | 0000FEBF | ARABIC LETTER DAD INITIAL FORM + AB | 00000637 | ARABIC LETTER TAH + AC | 00000638 | ARABIC LETTER ZAH + AD | 00000639 | ARABIC LETTER AIN + AE | 0000FECA | ARABIC LETTER AIN FINAL FORM + AF | 0000FECB | ARABIC LETTER AIN INITIAL FORM + B0 | 0000FECC | ARABIC LETTER AIN MEDIAL FORM + B1 | 0000063A | ARABIC LETTER GHAIN + B2 | 0000FECE | ARABIC LETTER GHAIN FINAL FORM + B3 | 0000FECF | ARABIC LETTER GHAIN INITIAL FORM + B4 | 0000FED0 | ARABIC LETTER GHAIN MEDIAL FORM + B5 | 00000641 | ARABIC LETTER FEH + B6 | 0000FED3 | ARABIC LETTER FEH INITIAL FORM + B7 | 00000642 | ARABIC LETTER QAF + B8 | 0000FED7 | ARABIC LETTER QAF INITIAL FORM + B9 | 00000643 | ARABIC LETTER KAF + BA | 0000FEDB | ARABIC LETTER KAF INITIAL FORM + BB | 0000007C | VERTICAL LINE + BE | 00000644 | ARABIC LETTER LAM + BF | 0000FEDE | ARABIC LETTER LAM FINAL FORM + C0 | 0000007B | LEFT CURLY BRACKET + C1 | 00000041 | LATIN CAPITAL LETTER A + C2 | 00000042 | LATIN CAPITAL LETTER B + C3 | 00000043 | LATIN CAPITAL LETTER C + C4 | 00000044 | LATIN CAPITAL LETTER D + C5 | 00000045 | LATIN CAPITAL LETTER E + C6 | 00000046 | LATIN CAPITAL LETTER F + C7 | 00000047 | LATIN CAPITAL LETTER G + C8 | 00000048 | LATIN CAPITAL LETTER H + C9 | 00000049 | LATIN CAPITAL LETTER I + CA | 000000AD | SOFT HYPHEN + CC | 00000645 | ARABIC LETTER MEEM + CD | 0000FEE3 | ARABIC LETTER MEEM INITIAL FORM + CF | 00000646 | ARABIC LETTER NOON + D0 | 0000007D | RIGHT CURLY BRACKET + D1 | 0000004A | LATIN CAPITAL LETTER J + D2 | 0000004B | LATIN CAPITAL LETTER K + D3 | 0000004C | LATIN CAPITAL LETTER L + D4 | 0000004D | LATIN CAPITAL LETTER M + D5 | 0000004E | LATIN CAPITAL LETTER N + D6 | 0000004F | LATIN CAPITAL LETTER O + D7 | 00000050 | LATIN CAPITAL LETTER P + D8 | 00000051 | LATIN CAPITAL LETTER Q + D9 | 00000052 | LATIN CAPITAL LETTER R + DA | 0000FEE7 | ARABIC LETTER NOON INITIAL FORM + DC | 00000648 | ARABIC LETTER WAW + E0 | 0000005C | REVERSE SOLIDUS + E2 | 00000053 | LATIN CAPITAL LETTER S + E3 | 00000054 | LATIN CAPITAL LETTER T + E4 | 00000055 | LATIN CAPITAL LETTER U + E5 | 00000056 | LATIN CAPITAL LETTER V + E6 | 00000057 | LATIN CAPITAL LETTER W + E7 | 00000058 | LATIN CAPITAL LETTER X + E8 | 00000059 | LATIN CAPITAL LETTER Y + E9 | 0000005A | LATIN CAPITAL LETTER Z + EA | 00000621 | ARABIC LETTER HAMZA + F0 | 00000030 | DIGIT ZERO + F1 | 00000031 | DIGIT ONE + F2 | 00000032 | DIGIT TWO + F3 | 00000033 | DIGIT THREE + F4 | 00000034 | DIGIT FOUR + F5 | 00000035 | DIGIT FIVE + F6 | 00000036 | DIGIT SIX + F7 | 00000037 | DIGIT SEVEN + F8 | 00000038 | DIGIT EIGHT + F9 | 00000039 | DIGIT NINE + FD | 00000651 | ARABIC SHADDA + FE | 0000FE7D | ARABIC SHADDA MEDIAL FORM + FF | 0000009F | APPLICATION PROGRAM COMMAND (APC) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/IEC_P27_1.pm b/lib/Locale/RecodeData/IEC_P27_1.pm new file mode 100644 index 0000000..8ff9e83 --- /dev/null +++ b/lib/Locale/RecodeData/IEC_P27_1.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for IEC_P27-1. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::IEC_P27_1; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x02c7, + 0x2261, + 0x2227, + 0x2228, + 0x2229, + 0x222a, + 0x2282, + 0x2283, + 0x21d0, + 0x21d2, + 0x2234, + 0x2235, + 0x2208, + 0x220b, + 0x2286, + 0x2287, + 0x222b, + 0x222e, + 0x221e, + 0x2207, + 0x2202, + 0x223c, + 0x2248, + 0x2243, + 0x2245, + 0x2264, + 0x2260, + 0x2265, + 0x2194, + 0x00ac, + 0x2200, + 0x2203, + 0x05d0, + 0x25a1, + 0x2225, + 0x0393, + 0x0394, + 0x22a5, + 0x2220, + 0x221f, + 0x0398, + 0x2329, + 0x232a, + 0x039b, + 0x2032, + 0x2033, + 0x039e, + 0x2213, + 0x03a0, + 0x00b2, + 0x03a3, + 0x00d7, + 0x00b3, + 0x03a5, + 0x03a6, + 0x00b7, + 0x03a8, + 0x03a9, + 0x2205, + 0x21c0, + 0x221a, + 0x0192, + 0x221d, + 0x00b1, + 0x00b0, + 0x03b1, + 0x03b2, + 0x03b3, + 0x03b4, + 0x03b5, + 0x03b6, + 0x03b7, + 0x03b8, + 0x03b9, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03be, + 0x2030, + 0x03c0, + 0x03c1, + 0x03c3, + 0x00f7, + 0x03c4, + 0x03c5, + 0x03c6, + 0x03c7, + 0x03c8, + 0x03c9, + 0x2020, + 0x2190, + 0x2191, + 0x2192, + 0x2193, + 0x203e, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xcb\x87", + "\xe2\x89\xa1", + "\xe2\x88\xa7", + "\xe2\x88\xa8", + "\xe2\x88\xa9", + "\xe2\x88\xaa", + "\xe2\x8a\x82", + "\xe2\x8a\x83", + "\xe2\x87\x90", + "\xe2\x87\x92", + "\xe2\x88\xb4", + "\xe2\x88\xb5", + "\xe2\x88\x88", + "\xe2\x88\x8b", + "\xe2\x8a\x86", + "\xe2\x8a\x87", + "\xe2\x88\xab", + "\xe2\x88\xae", + "\xe2\x88\x9e", + "\xe2\x88\x87", + "\xe2\x88\x82", + "\xe2\x88\xbc", + "\xe2\x89\x88", + "\xe2\x89\x83", + "\xe2\x89\x85", + "\xe2\x89\xa4", + "\xe2\x89\xa0", + "\xe2\x89\xa5", + "\xe2\x86\x94", + "\xc2\xac", + "\xe2\x88\x80", + "\xe2\x88\x83", + "\xd7\x90", + "\xe2\x96\xa1", + "\xe2\x88\xa5", + "\xce\x93", + "\xce\x94", + "\xe2\x8a\xa5", + "\xe2\x88\xa0", + "\xe2\x88\x9f", + "\xce\x98", + "\xe2\x8c\xa9", + "\xe2\x8c\xaa", + "\xce\x9b", + "\xe2\x80\xb2", + "\xe2\x80\xb3", + "\xce\x9e", + "\xe2\x88\x93", + "\xce\xa0", + "\xc2\xb2", + "\xce\xa3", + "\xc3\x97", + "\xc2\xb3", + "\xce\xa5", + "\xce\xa6", + "\xc2\xb7", + "\xce\xa8", + "\xce\xa9", + "\xe2\x88\x85", + "\xe2\x87\x80", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x88\x9d", + "\xc2\xb1", + "\xc2\xb0", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xce\xb4", + "\xce\xb5", + "\xce\xb6", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbe", + "\xe2\x80\xb0", + "\xcf\x80", + "\xcf\x81", + "\xcf\x83", + "\xc3\xb7", + "\xcf\x84", + "\xcf\x85", + "\xcf\x86", + "\xcf\x87", + "\xcf\x88", + "\xcf\x89", + "\xe2\x80\xa0", + "\xe2\x86\x90", + "\xe2\x86\x91", + "\xe2\x86\x92", + "\xe2\x86\x93", + "\xe2\x80\xbe", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000ac => "\xbd", + 0x000000b0 => "\xe0", + 0x000000b1 => "\xdf", + 0x000000b2 => "\xd1", + 0x000000b3 => "\xd4", + 0x000000b7 => "\xd7", + 0x000000d7 => "\xd3", + 0x000000f7 => "\xf3", + 0x00000192 => "\xdd", + 0x000002c7 => "\xa0", + 0x00000393 => "\xc3", + 0x00000394 => "\xc4", + 0x00000398 => "\xc8", + 0x0000039b => "\xcb", + 0x0000039e => "\xce", + 0x000003a0 => "\xd0", + 0x000003a3 => "\xd2", + 0x000003a5 => "\xd5", + 0x000003a6 => "\xd6", + 0x000003a8 => "\xd8", + 0x000003a9 => "\xd9", + 0x000003b1 => "\xe1", + 0x000003b2 => "\xe2", + 0x000003b3 => "\xe3", + 0x000003b4 => "\xe4", + 0x000003b5 => "\xe5", + 0x000003b6 => "\xe6", + 0x000003b7 => "\xe7", + 0x000003b8 => "\xe8", + 0x000003b9 => "\xe9", + 0x000003ba => "\xea", + 0x000003bb => "\xeb", + 0x000003bc => "\xec", + 0x000003bd => "\xed", + 0x000003be => "\xee", + 0x000003c0 => "\xf0", + 0x000003c1 => "\xf1", + 0x000003c3 => "\xf2", + 0x000003c4 => "\xf4", + 0x000003c5 => "\xf5", + 0x000003c6 => "\xf6", + 0x000003c7 => "\xf7", + 0x000003c8 => "\xf8", + 0x000003c9 => "\xf9", + 0x000005d0 => "\xc0", + 0x00002020 => "\xfa", + 0x00002030 => "\xef", + 0x00002032 => "\xcc", + 0x00002033 => "\xcd", + 0x0000203e => "\xff", + 0x00002190 => "\xfb", + 0x00002191 => "\xfc", + 0x00002192 => "\xfd", + 0x00002193 => "\xfe", + 0x00002194 => "\xbc", + 0x000021c0 => "\xdb", + 0x000021d0 => "\xa8", + 0x000021d2 => "\xa9", + 0x00002200 => "\xbe", + 0x00002202 => "\xb4", + 0x00002203 => "\xbf", + 0x00002205 => "\xda", + 0x00002207 => "\xb3", + 0x00002208 => "\xac", + 0x0000220b => "\xad", + 0x00002213 => "\xcf", + 0x0000221a => "\xdc", + 0x0000221d => "\xde", + 0x0000221e => "\xb2", + 0x0000221f => "\xc7", + 0x00002220 => "\xc6", + 0x00002225 => "\xc2", + 0x00002227 => "\xa2", + 0x00002228 => "\xa3", + 0x00002229 => "\xa4", + 0x0000222a => "\xa5", + 0x0000222b => "\xb0", + 0x0000222e => "\xb1", + 0x00002234 => "\xaa", + 0x00002235 => "\xab", + 0x0000223c => "\xb5", + 0x00002243 => "\xb7", + 0x00002245 => "\xb8", + 0x00002248 => "\xb6", + 0x00002260 => "\xba", + 0x00002261 => "\xa1", + 0x00002264 => "\xb9", + 0x00002265 => "\xbb", + 0x00002282 => "\xa6", + 0x00002283 => "\xa7", + 0x00002286 => "\xae", + 0x00002287 => "\xaf", + 0x000022a5 => "\xc5", + 0x00002329 => "\xc9", + 0x0000232a => "\xca", + 0x000025a1 => "\xc1", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::IEC_P27_1 - Conversion routines for IEC_P27_1 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for IEC_P27-1. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-143 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000002C7 | CARON (Mandarin Chinese third tone) + A1 | 00002261 | IDENTICAL TO + A2 | 00002227 | LOGICAL AND + A3 | 00002228 | LOGICAL OR + A4 | 00002229 | INTERSECTION + A5 | 0000222A | UNION + A6 | 00002282 | SUBSET OF + A7 | 00002283 | SUPERSET OF + A8 | 000021D0 | LEFTWARDS DOUBLE ARROW + A9 | 000021D2 | RIGHTWARDS DOUBLE ARROW + AA | 00002234 | THEREFORE + AB | 00002235 | BECAUSE + AC | 00002208 | ELEMENT OF + AD | 0000220B | CONTAINS AS MEMBER + AE | 00002286 | SUBSET OF OR EQUAL TO + AF | 00002287 | SUPERSET OF OR EQUAL TO + B0 | 0000222B | INTEGRAL + B1 | 0000222E | CONTOUR INTEGRAL + B2 | 0000221E | INFINITY + B3 | 00002207 | NABLA + B4 | 00002202 | PARTIAL DIFFERENTIAL + B5 | 0000223C | TILDE OPERATOR + B6 | 00002248 | ALMOST EQUAL TO + B7 | 00002243 | ASYMPTOTICALLY EQUAL TO + B8 | 00002245 | APPROXIMATELY EQUAL TO + B9 | 00002264 | LESS-THAN OR EQUAL TO + BA | 00002260 | NOT EQUAL TO + BB | 00002265 | GREATER-THAN OR EQUAL TO + BC | 00002194 | LEFT RIGHT ARROW + BD | 000000AC | NOT SIGN + BE | 00002200 | FOR ALL + BF | 00002203 | THERE EXISTS + C0 | 000005D0 | HEBREW LETTER ALEF + C1 | 000025A1 | WHITE SQUARE + C2 | 00002225 | PARALLEL TO + C3 | 00000393 | GREEK CAPITAL LETTER GAMMA + C4 | 00000394 | GREEK CAPITAL LETTER DELTA + C5 | 000022A5 | UP TACK + C6 | 00002220 | ANGLE + C7 | 0000221F | RIGHT ANGLE + C8 | 00000398 | GREEK CAPITAL LETTER THETA + C9 | 00002329 | LEFT-POINTING ANGLE BRACKET + CA | 0000232A | RIGHT-POINTING ANGLE BRACKET + CB | 0000039B | GREEK CAPITAL LETTER LAMDA + CC | 00002032 | PRIME + CD | 00002033 | DOUBLE PRIME + CE | 0000039E | GREEK CAPITAL LETTER XI + CF | 00002213 | MINUS-OR-PLUS SIGN + D0 | 000003A0 | GREEK CAPITAL LETTER PI + D1 | 000000B2 | SUPERSCRIPT TWO + D2 | 000003A3 | GREEK CAPITAL LETTER SIGMA + D3 | 000000D7 | MULTIPLICATION SIGN + D4 | 000000B3 | SUPERSCRIPT THREE + D5 | 000003A5 | GREEK CAPITAL LETTER UPSILON + D6 | 000003A6 | GREEK CAPITAL LETTER PHI + D7 | 000000B7 | MIDDLE DOT + D8 | 000003A8 | GREEK CAPITAL LETTER PSI + D9 | 000003A9 | GREEK CAPITAL LETTER OMEGA + DA | 00002205 | EMPTY SET + DB | 000021C0 | RIGHTWARDS HARPOON WITH BARB UPWARDS + DC | 0000221A | SQUARE ROOT + DD | 00000192 | LATIN SMALL LETTER F WITH HOOK + DE | 0000221D | PROPORTIONAL TO + DF | 000000B1 | PLUS-MINUS SIGN + E0 | 000000B0 | DEGREE SIGN + E1 | 000003B1 | GREEK SMALL LETTER ALPHA + E2 | 000003B2 | GREEK SMALL LETTER BETA + E3 | 000003B3 | GREEK SMALL LETTER GAMMA + E4 | 000003B4 | GREEK SMALL LETTER DELTA + E5 | 000003B5 | GREEK SMALL LETTER EPSILON + E6 | 000003B6 | GREEK SMALL LETTER ZETA + E7 | 000003B7 | GREEK SMALL LETTER ETA + E8 | 000003B8 | GREEK SMALL LETTER THETA + E9 | 000003B9 | GREEK SMALL LETTER IOTA + EA | 000003BA | GREEK SMALL LETTER KAPPA + EB | 000003BB | GREEK SMALL LETTER LAMDA + EC | 000003BC | GREEK SMALL LETTER MU + ED | 000003BD | GREEK SMALL LETTER NU + EE | 000003BE | GREEK SMALL LETTER XI + EF | 00002030 | PER MILLE SIGN + F0 | 000003C0 | GREEK SMALL LETTER PI + F1 | 000003C1 | GREEK SMALL LETTER RHO + F2 | 000003C3 | GREEK SMALL LETTER SIGMA + F3 | 000000F7 | DIVISION SIGN + F4 | 000003C4 | GREEK SMALL LETTER TAU + F5 | 000003C5 | GREEK SMALL LETTER UPSILON + F6 | 000003C6 | GREEK SMALL LETTER PHI + F7 | 000003C7 | GREEK SMALL LETTER CHI + F8 | 000003C8 | GREEK SMALL LETTER PSI + F9 | 000003C9 | GREEK SMALL LETTER OMEGA + FA | 00002020 | DAGGER + FB | 00002190 | LEFTWARDS ARROW + FC | 00002191 | UPWARDS ARROW + FD | 00002192 | RIGHTWARDS ARROW + FE | 00002193 | DOWNWARDS ARROW + FF | 0000203E | OVERLINE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/INIS.pm b/lib/Locale/RecodeData/INIS.pm new file mode 100644 index 0000000..2955e99 --- /dev/null +++ b/lib/Locale/RecodeData/INIS.pm @@ -0,0 +1,858 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for INIS. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::INIS; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0024, + 0x0025, + 0xfffd, + 0x0027, + 0x0028, + 0x0029, + 0x002a, + 0x002b, + 0x002c, + 0x002d, + 0x002e, + 0x002f, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x003a, + 0x003b, + 0x003c, + 0x003d, + 0x003e, + 0xfffd, + 0xfffd, + 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, + 0xfffd, + 0x005d, + 0xfffd, + 0xfffd, + 0xfffd, + 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, + 0xfffd, + 0x007c, + 0xfffd, + 0xfffd, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x24", + "\x25", + "\xef\xbf\xbd", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\xef\xbf\xbd", + "\x5d", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xef\xbf\xbd", + "\x7c", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005d => "\x5d", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007c => "\x7c", + 0x0000007f => "\x7f", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::INIS - Conversion routines for INIS + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for INIS. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-49 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5D | 0000005D | RIGHT SQUARE BRACKET + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7C | 0000007C | VERTICAL LINE + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/INIS_8.pm b/lib/Locale/RecodeData/INIS_8.pm new file mode 100644 index 0000000..77dd020 --- /dev/null +++ b/lib/Locale/RecodeData/INIS_8.pm @@ -0,0 +1,773 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for INIS-8. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::INIS_8; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x03b1, + 0x03b2, + 0x03b3, + 0x03b4, + 0x039e, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x2192, + 0x222b, + 0x2070, + 0x00b9, + 0x00b2, + 0x00b3, + 0x2074, + 0x2075, + 0x2076, + 0x2077, + 0x2078, + 0x2079, + 0x207a, + 0x207b, + 0x30eb, + 0x0394, + 0x039b, + 0x03a9, + 0x2080, + 0x2081, + 0x2082, + 0x2083, + 0x2084, + 0x2085, + 0x2086, + 0x2087, + 0x2088, + 0x2089, + 0x03a3, + 0x03bc, + 0x03bd, + 0x03c9, + 0x03c0, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xce\xb4", + "\xce\x9e", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x86\x92", + "\xe2\x88\xab", + "\xe2\x81\xb0", + "\xc2\xb9", + "\xc2\xb2", + "\xc2\xb3", + "\xe2\x81\xb4", + "\xe2\x81\xb5", + "\xe2\x81\xb6", + "\xe2\x81\xb7", + "\xe2\x81\xb8", + "\xe2\x81\xb9", + "\xe2\x81\xba", + "\xe2\x81\xbb", + "\xe3\x83\xab", + "\xce\x94", + "\xce\x9b", + "\xce\xa9", + "\xe2\x82\x80", + "\xe2\x82\x81", + "\xe2\x82\x82", + "\xe2\x82\x83", + "\xe2\x82\x84", + "\xe2\x82\x85", + "\xe2\x82\x86", + "\xe2\x82\x87", + "\xe2\x82\x88", + "\xe2\x82\x89", + "\xce\xa3", + "\xce\xbc", + "\xce\xbd", + "\xcf\x89", + "\xcf\x80", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x0000007f => "\x7f", + 0x000000b2 => "\x62", + 0x000000b3 => "\x63", + 0x000000b9 => "\x61", + 0x00000394 => "\x6d", + 0x0000039b => "\x6e", + 0x0000039e => "\x3e", + 0x000003a3 => "\x7a", + 0x000003a9 => "\x6f", + 0x000003b1 => "\x3a", + 0x000003b2 => "\x3b", + 0x000003b3 => "\x3c", + 0x000003b4 => "\x3d", + 0x000003bc => "\x7b", + 0x000003bd => "\x7c", + 0x000003c0 => "\x7e", + 0x000003c9 => "\x7d", + 0x00002070 => "\x60", + 0x00002074 => "\x64", + 0x00002075 => "\x65", + 0x00002076 => "\x66", + 0x00002077 => "\x67", + 0x00002078 => "\x68", + 0x00002079 => "\x69", + 0x0000207a => "\x6a", + 0x0000207b => "\x6b", + 0x00002080 => "\x70", + 0x00002081 => "\x71", + 0x00002082 => "\x72", + 0x00002083 => "\x73", + 0x00002084 => "\x74", + 0x00002085 => "\x75", + 0x00002086 => "\x76", + 0x00002087 => "\x77", + 0x00002088 => "\x78", + 0x00002089 => "\x79", + 0x00002192 => "\x5e", + 0x0000222b => "\x5f", + 0x000030eb => "\x6c", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::INIS_8 - Conversion routines for INIS_8 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for INIS-8. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: ECMA registry + alias ISO-IR-50 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 3A | 000003B1 | GREEK SMALL LETTER ALPHA + 3B | 000003B2 | GREEK SMALL LETTER BETA + 3C | 000003B3 | GREEK SMALL LETTER GAMMA + 3D | 000003B4 | GREEK SMALL LETTER DELTA + 3E | 0000039E | GREEK CAPITAL LETTER XI + 5E | 00002192 | RIGHTWARDS ARROW + 5F | 0000222B | INTEGRAL + 60 | 00002070 | SUPERSCRIPT ZERO + 61 | 000000B9 | SUPERSCRIPT ONE + 62 | 000000B2 | SUPERSCRIPT TWO + 63 | 000000B3 | SUPERSCRIPT THREE + 64 | 00002074 | SUPERSCRIPT FOUR + 65 | 00002075 | SUPERSCRIPT FIVE + 66 | 00002076 | SUPERSCRIPT SIX + 67 | 00002077 | SUPERSCRIPT SEVEN + 68 | 00002078 | SUPERSCRIPT EIGHT + 69 | 00002079 | SUPERSCRIPT NINE + 6A | 0000207A | SUPERSCRIPT PLUS SIGN + 6B | 0000207B | SUPERSCRIPT MINUS + 6C | 000030EB | KATAKANA LETTER RU + 6D | 00000394 | GREEK CAPITAL LETTER DELTA + 6E | 0000039B | GREEK CAPITAL LETTER LAMDA + 6F | 000003A9 | GREEK CAPITAL LETTER OMEGA + 70 | 00002080 | SUBSCRIPT ZERO + 71 | 00002081 | SUBSCRIPT ONE + 72 | 00002082 | SUBSCRIPT TWO + 73 | 00002083 | SUBSCRIPT THREE + 74 | 00002084 | SUBSCRIPT FOUR + 75 | 00002085 | SUBSCRIPT FIVE + 76 | 00002086 | SUBSCRIPT SIX + 77 | 00002087 | SUBSCRIPT SEVEN + 78 | 00002088 | SUBSCRIPT EIGHT + 79 | 00002089 | SUBSCRIPT NINE + 7A | 000003A3 | GREEK CAPITAL LETTER SIGMA + 7B | 000003BC | GREEK SMALL LETTER MU + 7C | 000003BD | GREEK SMALL LETTER NU + 7D | 000003C9 | GREEK SMALL LETTER OMEGA + 7E | 000003C0 | GREEK SMALL LETTER PI + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/INIS_CYRILLIC.pm b/lib/Locale/RecodeData/INIS_CYRILLIC.pm new file mode 100644 index 0000000..ba25a2e --- /dev/null +++ b/lib/Locale/RecodeData/INIS_CYRILLIC.pm @@ -0,0 +1,860 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for INIS-CYRILLIC. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::INIS_CYRILLIC; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x221a, + 0xfffd, + 0x2192, + 0x222b, + 0x03b1, + 0x03b2, + 0x03b3, + 0x03b4, + 0x03a3, + 0x03bc, + 0x03bd, + 0x03c9, + 0x03c0, + 0x039e, + 0x0394, + 0x039b, + 0x03a9, + 0x042a, + 0x207b, + 0x207a, + 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, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x88\x9a", + "\xef\xbf\xbd", + "\xe2\x86\x92", + "\xe2\x88\xab", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xce\xb4", + "\xce\xa3", + "\xce\xbc", + "\xce\xbd", + "\xcf\x89", + "\xcf\x80", + "\xce\x9e", + "\xce\x94", + "\xce\x9b", + "\xce\xa9", + "\xd0\xaa", + "\xe2\x81\xbb", + "\xe2\x81\xba", + "\xd1\x8e", + "\xd0\xb0", + "\xd0\xb1", + "\xd1\x86", + "\xd0\xb4", + "\xd0\xb5", + "\xd1\x84", + "\xd0\xb3", + "\xd1\x85", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x8f", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd0\xb6", + "\xd0\xb2", + "\xd1\x8c", + "\xd1\x8b", + "\xd0\xb7", + "\xd1\x88", + "\xd1\x8d", + "\xd1\x89", + "\xd1\x87", + "\xd1\x8a", + "\xd0\xae", + "\xd0\x90", + "\xd0\x91", + "\xd0\xa6", + "\xd0\x94", + "\xd0\x95", + "\xd0\xa4", + "\xd0\x93", + "\xd0\xa5", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xaf", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\x96", + "\xd0\x92", + "\xd0\xac", + "\xd0\xab", + "\xd0\x97", + "\xd0\xa8", + "\xd0\xad", + "\xd0\xa9", + "\xd0\xa7", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x0000007f => "\x7f", + 0x00000394 => "\x3a", + 0x0000039b => "\x3b", + 0x0000039e => "\x39", + 0x000003a3 => "\x34", + 0x000003a9 => "\x3c", + 0x000003b1 => "\x30", + 0x000003b2 => "\x31", + 0x000003b3 => "\x32", + 0x000003b4 => "\x33", + 0x000003bc => "\x35", + 0x000003bd => "\x36", + 0x000003c0 => "\x38", + 0x000003c9 => "\x37", + 0x00000410 => "\x61", + 0x00000411 => "\x62", + 0x00000412 => "\x77", + 0x00000413 => "\x67", + 0x00000414 => "\x64", + 0x00000415 => "\x65", + 0x00000416 => "\x76", + 0x00000417 => "\x7a", + 0x00000418 => "\x69", + 0x00000419 => "\x6a", + 0x0000041a => "\x6b", + 0x0000041b => "\x6c", + 0x0000041c => "\x6d", + 0x0000041d => "\x6e", + 0x0000041e => "\x6f", + 0x0000041f => "\x70", + 0x00000420 => "\x72", + 0x00000421 => "\x73", + 0x00000422 => "\x74", + 0x00000423 => "\x75", + 0x00000424 => "\x66", + 0x00000425 => "\x68", + 0x00000426 => "\x63", + 0x00000427 => "\x7e", + 0x00000428 => "\x7b", + 0x00000429 => "\x7d", + 0x0000042a => "\x3d", + 0x0000042b => "\x79", + 0x0000042c => "\x78", + 0x0000042d => "\x7c", + 0x0000042e => "\x60", + 0x0000042f => "\x71", + 0x00000430 => "\x41", + 0x00000431 => "\x42", + 0x00000432 => "\x57", + 0x00000433 => "\x47", + 0x00000434 => "\x44", + 0x00000435 => "\x45", + 0x00000436 => "\x56", + 0x00000437 => "\x5a", + 0x00000438 => "\x49", + 0x00000439 => "\x4a", + 0x0000043a => "\x4b", + 0x0000043b => "\x4c", + 0x0000043c => "\x4d", + 0x0000043d => "\x4e", + 0x0000043e => "\x4f", + 0x0000043f => "\x50", + 0x00000440 => "\x52", + 0x00000441 => "\x53", + 0x00000442 => "\x54", + 0x00000443 => "\x55", + 0x00000444 => "\x46", + 0x00000445 => "\x48", + 0x00000446 => "\x43", + 0x00000447 => "\x5e", + 0x00000448 => "\x5b", + 0x00000449 => "\x5d", + 0x0000044a => "\x5f", + 0x0000044b => "\x59", + 0x0000044c => "\x58", + 0x0000044d => "\x5c", + 0x0000044e => "\x40", + 0x0000044f => "\x51", + 0x0000207a => "\x3f", + 0x0000207b => "\x3e", + 0x00002192 => "\x2e", + 0x0000221a => "\x2c", + 0x0000222b => "\x2f", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::INIS_CYRILLIC - Conversion routines for INIS_CYRILLIC + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for INIS-CYRILLIC. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-51 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 2C | 0000221A | SQUARE ROOT + 2E | 00002192 | RIGHTWARDS ARROW + 2F | 0000222B | INTEGRAL + 30 | 000003B1 | GREEK SMALL LETTER ALPHA + 31 | 000003B2 | GREEK SMALL LETTER BETA + 32 | 000003B3 | GREEK SMALL LETTER GAMMA + 33 | 000003B4 | GREEK SMALL LETTER DELTA + 34 | 000003A3 | GREEK CAPITAL LETTER SIGMA + 35 | 000003BC | GREEK SMALL LETTER MU + 36 | 000003BD | GREEK SMALL LETTER NU + 37 | 000003C9 | GREEK SMALL LETTER OMEGA + 38 | 000003C0 | GREEK SMALL LETTER PI + 39 | 0000039E | GREEK CAPITAL LETTER XI + 3A | 00000394 | GREEK CAPITAL LETTER DELTA + 3B | 0000039B | GREEK CAPITAL LETTER LAMDA + 3C | 000003A9 | GREEK CAPITAL LETTER OMEGA + 3D | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + 3E | 0000207B | SUPERSCRIPT MINUS + 3F | 0000207A | SUPERSCRIPT PLUS SIGN + 40 | 0000044E | CYRILLIC SMALL LETTER YU + 41 | 00000430 | CYRILLIC SMALL LETTER A + 42 | 00000431 | CYRILLIC SMALL LETTER BE + 43 | 00000446 | CYRILLIC SMALL LETTER TSE + 44 | 00000434 | CYRILLIC SMALL LETTER DE + 45 | 00000435 | CYRILLIC SMALL LETTER IE + 46 | 00000444 | CYRILLIC SMALL LETTER EF + 47 | 00000433 | CYRILLIC SMALL LETTER GHE + 48 | 00000445 | CYRILLIC SMALL LETTER HA + 49 | 00000438 | CYRILLIC SMALL LETTER I + 4A | 00000439 | CYRILLIC SMALL LETTER SHORT I + 4B | 0000043A | CYRILLIC SMALL LETTER KA + 4C | 0000043B | CYRILLIC SMALL LETTER EL + 4D | 0000043C | CYRILLIC SMALL LETTER EM + 4E | 0000043D | CYRILLIC SMALL LETTER EN + 4F | 0000043E | CYRILLIC SMALL LETTER O + 50 | 0000043F | CYRILLIC SMALL LETTER PE + 51 | 0000044F | CYRILLIC SMALL LETTER YA + 52 | 00000440 | CYRILLIC SMALL LETTER ER + 53 | 00000441 | CYRILLIC SMALL LETTER ES + 54 | 00000442 | CYRILLIC SMALL LETTER TE + 55 | 00000443 | CYRILLIC SMALL LETTER U + 56 | 00000436 | CYRILLIC SMALL LETTER ZHE + 57 | 00000432 | CYRILLIC SMALL LETTER VE + 58 | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + 59 | 0000044B | CYRILLIC SMALL LETTER YERU + 5A | 00000437 | CYRILLIC SMALL LETTER ZE + 5B | 00000448 | CYRILLIC SMALL LETTER SHA + 5C | 0000044D | CYRILLIC SMALL LETTER E + 5D | 00000449 | CYRILLIC SMALL LETTER SHCHA + 5E | 00000447 | CYRILLIC SMALL LETTER CHE + 5F | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + 60 | 0000042E | CYRILLIC CAPITAL LETTER YU + 61 | 00000410 | CYRILLIC CAPITAL LETTER A + 62 | 00000411 | CYRILLIC CAPITAL LETTER BE + 63 | 00000426 | CYRILLIC CAPITAL LETTER TSE + 64 | 00000414 | CYRILLIC CAPITAL LETTER DE + 65 | 00000415 | CYRILLIC CAPITAL LETTER IE + 66 | 00000424 | CYRILLIC CAPITAL LETTER EF + 67 | 00000413 | CYRILLIC CAPITAL LETTER GHE + 68 | 00000425 | CYRILLIC CAPITAL LETTER HA + 69 | 00000418 | CYRILLIC CAPITAL LETTER I + 6A | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + 6B | 0000041A | CYRILLIC CAPITAL LETTER KA + 6C | 0000041B | CYRILLIC CAPITAL LETTER EL + 6D | 0000041C | CYRILLIC CAPITAL LETTER EM + 6E | 0000041D | CYRILLIC CAPITAL LETTER EN + 6F | 0000041E | CYRILLIC CAPITAL LETTER O + 70 | 0000041F | CYRILLIC CAPITAL LETTER PE + 71 | 0000042F | CYRILLIC CAPITAL LETTER YA + 72 | 00000420 | CYRILLIC CAPITAL LETTER ER + 73 | 00000421 | CYRILLIC CAPITAL LETTER ES + 74 | 00000422 | CYRILLIC CAPITAL LETTER TE + 75 | 00000423 | CYRILLIC CAPITAL LETTER U + 76 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + 77 | 00000412 | CYRILLIC CAPITAL LETTER VE + 78 | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + 79 | 0000042B | CYRILLIC CAPITAL LETTER YERU + 7A | 00000417 | CYRILLIC CAPITAL LETTER ZE + 7B | 00000428 | CYRILLIC CAPITAL LETTER SHA + 7C | 0000042D | CYRILLIC CAPITAL LETTER E + 7D | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + 7E | 00000427 | CYRILLIC CAPITAL LETTER CHE + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_10367_BOX.pm b/lib/Locale/RecodeData/ISO_10367_BOX.pm new file mode 100644 index 0000000..585a43c --- /dev/null +++ b/lib/Locale/RecodeData/ISO_10367_BOX.pm @@ -0,0 +1,1006 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO_10367-BOX. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_10367_BOX; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x2551, + 0x2550, + 0x2554, + 0x2557, + 0x255a, + 0x255d, + 0x2560, + 0x2563, + 0x2566, + 0x2569, + 0x256c, + 0xe019, + 0x2584, + 0x2588, + 0x25aa, + 0xfffd, + 0x2502, + 0x2500, + 0x250c, + 0x2510, + 0x2514, + 0x2518, + 0x251c, + 0x2524, + 0x252c, + 0x2534, + 0x253c, + 0x2591, + 0x2592, + 0x2593, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x95\x91", + "\xe2\x95\x90", + "\xe2\x95\x94", + "\xe2\x95\x97", + "\xe2\x95\x9a", + "\xe2\x95\x9d", + "\xe2\x95\xa0", + "\xe2\x95\xa3", + "\xe2\x95\xa6", + "\xe2\x95\xa9", + "\xe2\x95\xac", + "\xee\x80\x99", + "\xe2\x96\x84", + "\xe2\x96\x88", + "\xe2\x96\xaa", + "\xef\xbf\xbd", + "\xe2\x94\x82", + "\xe2\x94\x80", + "\xe2\x94\x8c", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\x98", + "\xe2\x94\x9c", + "\xe2\x94\xa4", + "\xe2\x94\xac", + "\xe2\x94\xb4", + "\xe2\x94\xbc", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x00002500 => "\xd1", + 0x00002502 => "\xd0", + 0x0000250c => "\xd2", + 0x00002510 => "\xd3", + 0x00002514 => "\xd4", + 0x00002518 => "\xd5", + 0x0000251c => "\xd6", + 0x00002524 => "\xd7", + 0x0000252c => "\xd8", + 0x00002534 => "\xd9", + 0x0000253c => "\xda", + 0x00002550 => "\xc1", + 0x00002551 => "\xc0", + 0x00002554 => "\xc2", + 0x00002557 => "\xc3", + 0x0000255a => "\xc4", + 0x0000255d => "\xc5", + 0x00002560 => "\xc6", + 0x00002563 => "\xc7", + 0x00002566 => "\xc8", + 0x00002569 => "\xc9", + 0x0000256c => "\xca", + 0x00002584 => "\xcc", + 0x00002588 => "\xcd", + 0x00002591 => "\xdb", + 0x00002592 => "\xdc", + 0x00002593 => "\xdd", + 0x000025aa => "\xce", + 0x0000e019 => "\xcb", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_10367_BOX - Conversion routines for ISO_10367_BOX + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO_10367-BOX. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-155 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + C0 | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + C1 | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + C2 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + C3 | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + C4 | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + C5 | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + C6 | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + C7 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + C8 | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + C9 | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + CA | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + CB | 0000E019 | Unit space B EISO-IR-8-1_60E + CC | 00002584 | LOWER HALF BLOCK + CD | 00002588 | FULL BLOCK + CE | 000025AA | BLACK SMALL SQUARE + D0 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + D1 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + D2 | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + D3 | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + D4 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + D5 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + D6 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + D7 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + D8 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + D9 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + DA | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + DB | 00002591 | LIGHT SHADE + DC | 00002592 | MEDIUM SHADE + DD | 00002593 | DARK SHADE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_2033_1983.pm b/lib/Locale/RecodeData/ISO_2033_1983.pm new file mode 100644 index 0000000..3436752 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_2033_1983.pm @@ -0,0 +1,726 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO_2033-1983. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_2033_1983; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x2446, + 0x2447, + 0x2448, + 0x2449, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xe2\x91\x86", + "\xe2\x91\x87", + "\xe2\x91\x88", + "\xe2\x91\x89", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000007f => "\x7f", + 0x00002446 => "\x3a", + 0x00002447 => "\x3b", + 0x00002448 => "\x3c", + 0x00002449 => "\x3d", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_2033_1983 - Conversion routines for ISO_2033_1983 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO_2033-1983. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: ECMA registry + alias ISO-IR-98 + alias E13B + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 00002446 | OCR BRANCH BANK IDENTIFICATION + 3B | 00002447 | OCR AMOUNT OF CHECK + 3C | 00002448 | OCR DASH + 3D | 00002449 | OCR CUSTOMER ACCOUNT NUMBER + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_5427.pm b/lib/Locale/RecodeData/ISO_5427.pm new file mode 100644 index 0000000..149522d --- /dev/null +++ b/lib/Locale/RecodeData/ISO_5427.pm @@ -0,0 +1,885 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO_5427. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_5427; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 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, + 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, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\xc2\xa4", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\xd1\x8e", + "\xd0\xb0", + "\xd0\xb1", + "\xd1\x86", + "\xd0\xb4", + "\xd0\xb5", + "\xd1\x84", + "\xd0\xb3", + "\xd1\x85", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x8f", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd0\xb6", + "\xd0\xb2", + "\xd1\x8c", + "\xd1\x8b", + "\xd0\xb7", + "\xd1\x88", + "\xd1\x8d", + "\xd1\x89", + "\xd1\x87", + "\xd1\x8a", + "\xd0\xae", + "\xd0\x90", + "\xd0\x91", + "\xd0\xa6", + "\xd0\x94", + "\xd0\x95", + "\xd0\xa4", + "\xd0\x93", + "\xd0\xa5", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xaf", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\x96", + "\xd0\x92", + "\xd0\xac", + "\xd0\xab", + "\xd0\x97", + "\xd0\xa8", + "\xd0\xad", + "\xd0\xa9", + "\xd0\xa7", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x0000007f => "\x7f", + 0x000000a4 => "\x24", + 0x00000410 => "\x61", + 0x00000411 => "\x62", + 0x00000412 => "\x77", + 0x00000413 => "\x67", + 0x00000414 => "\x64", + 0x00000415 => "\x65", + 0x00000416 => "\x76", + 0x00000417 => "\x7a", + 0x00000418 => "\x69", + 0x00000419 => "\x6a", + 0x0000041a => "\x6b", + 0x0000041b => "\x6c", + 0x0000041c => "\x6d", + 0x0000041d => "\x6e", + 0x0000041e => "\x6f", + 0x0000041f => "\x70", + 0x00000420 => "\x72", + 0x00000421 => "\x73", + 0x00000422 => "\x74", + 0x00000423 => "\x75", + 0x00000424 => "\x66", + 0x00000425 => "\x68", + 0x00000426 => "\x63", + 0x00000427 => "\x7e", + 0x00000428 => "\x7b", + 0x00000429 => "\x7d", + 0x0000042b => "\x79", + 0x0000042c => "\x78", + 0x0000042d => "\x7c", + 0x0000042e => "\x60", + 0x0000042f => "\x71", + 0x00000430 => "\x41", + 0x00000431 => "\x42", + 0x00000432 => "\x57", + 0x00000433 => "\x47", + 0x00000434 => "\x44", + 0x00000435 => "\x45", + 0x00000436 => "\x56", + 0x00000437 => "\x5a", + 0x00000438 => "\x49", + 0x00000439 => "\x4a", + 0x0000043a => "\x4b", + 0x0000043b => "\x4c", + 0x0000043c => "\x4d", + 0x0000043d => "\x4e", + 0x0000043e => "\x4f", + 0x0000043f => "\x50", + 0x00000440 => "\x52", + 0x00000441 => "\x53", + 0x00000442 => "\x54", + 0x00000443 => "\x55", + 0x00000444 => "\x46", + 0x00000445 => "\x48", + 0x00000446 => "\x43", + 0x00000447 => "\x5e", + 0x00000448 => "\x5b", + 0x00000449 => "\x5d", + 0x0000044a => "\x5f", + 0x0000044b => "\x59", + 0x0000044c => "\x58", + 0x0000044d => "\x5c", + 0x0000044e => "\x40", + 0x0000044f => "\x51", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_5427 - Conversion routines for ISO_5427 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO_5427. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-37 + alias KOI-7 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 000000A4 | CURRENCY SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 0000044E | CYRILLIC SMALL LETTER YU + 41 | 00000430 | CYRILLIC SMALL LETTER A + 42 | 00000431 | CYRILLIC SMALL LETTER BE + 43 | 00000446 | CYRILLIC SMALL LETTER TSE + 44 | 00000434 | CYRILLIC SMALL LETTER DE + 45 | 00000435 | CYRILLIC SMALL LETTER IE + 46 | 00000444 | CYRILLIC SMALL LETTER EF + 47 | 00000433 | CYRILLIC SMALL LETTER GHE + 48 | 00000445 | CYRILLIC SMALL LETTER HA + 49 | 00000438 | CYRILLIC SMALL LETTER I + 4A | 00000439 | CYRILLIC SMALL LETTER SHORT I + 4B | 0000043A | CYRILLIC SMALL LETTER KA + 4C | 0000043B | CYRILLIC SMALL LETTER EL + 4D | 0000043C | CYRILLIC SMALL LETTER EM + 4E | 0000043D | CYRILLIC SMALL LETTER EN + 4F | 0000043E | CYRILLIC SMALL LETTER O + 50 | 0000043F | CYRILLIC SMALL LETTER PE + 51 | 0000044F | CYRILLIC SMALL LETTER YA + 52 | 00000440 | CYRILLIC SMALL LETTER ER + 53 | 00000441 | CYRILLIC SMALL LETTER ES + 54 | 00000442 | CYRILLIC SMALL LETTER TE + 55 | 00000443 | CYRILLIC SMALL LETTER U + 56 | 00000436 | CYRILLIC SMALL LETTER ZHE + 57 | 00000432 | CYRILLIC SMALL LETTER VE + 58 | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + 59 | 0000044B | CYRILLIC SMALL LETTER YERU + 5A | 00000437 | CYRILLIC SMALL LETTER ZE + 5B | 00000448 | CYRILLIC SMALL LETTER SHA + 5C | 0000044D | CYRILLIC SMALL LETTER E + 5D | 00000449 | CYRILLIC SMALL LETTER SHCHA + 5E | 00000447 | CYRILLIC SMALL LETTER CHE + 5F | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + 60 | 0000042E | CYRILLIC CAPITAL LETTER YU + 61 | 00000410 | CYRILLIC CAPITAL LETTER A + 62 | 00000411 | CYRILLIC CAPITAL LETTER BE + 63 | 00000426 | CYRILLIC CAPITAL LETTER TSE + 64 | 00000414 | CYRILLIC CAPITAL LETTER DE + 65 | 00000415 | CYRILLIC CAPITAL LETTER IE + 66 | 00000424 | CYRILLIC CAPITAL LETTER EF + 67 | 00000413 | CYRILLIC CAPITAL LETTER GHE + 68 | 00000425 | CYRILLIC CAPITAL LETTER HA + 69 | 00000418 | CYRILLIC CAPITAL LETTER I + 6A | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + 6B | 0000041A | CYRILLIC CAPITAL LETTER KA + 6C | 0000041B | CYRILLIC CAPITAL LETTER EL + 6D | 0000041C | CYRILLIC CAPITAL LETTER EM + 6E | 0000041D | CYRILLIC CAPITAL LETTER EN + 6F | 0000041E | CYRILLIC CAPITAL LETTER O + 70 | 0000041F | CYRILLIC CAPITAL LETTER PE + 71 | 0000042F | CYRILLIC CAPITAL LETTER YA + 72 | 00000420 | CYRILLIC CAPITAL LETTER ER + 73 | 00000421 | CYRILLIC CAPITAL LETTER ES + 74 | 00000422 | CYRILLIC CAPITAL LETTER TE + 75 | 00000423 | CYRILLIC CAPITAL LETTER U + 76 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + 77 | 00000412 | CYRILLIC CAPITAL LETTER VE + 78 | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + 79 | 0000042B | CYRILLIC CAPITAL LETTER YERU + 7A | 00000417 | CYRILLIC CAPITAL LETTER ZE + 7B | 00000428 | CYRILLIC CAPITAL LETTER SHA + 7C | 0000042D | CYRILLIC CAPITAL LETTER E + 7D | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + 7E | 00000427 | CYRILLIC CAPITAL LETTER CHE + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_5427_EXT.pm b/lib/Locale/RecodeData/ISO_5427_EXT.pm new file mode 100644 index 0000000..23db317 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_5427_EXT.pm @@ -0,0 +1,782 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO_5427-EXT. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_5427_EXT; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0491, + 0x0452, + 0x0453, + 0x0454, + 0x0451, + 0x0455, + 0x0456, + 0x0457, + 0x0458, + 0x0459, + 0x045a, + 0x045b, + 0x045c, + 0x045e, + 0x045f, + 0xfffd, + 0x0463, + 0x0473, + 0x0475, + 0x046b, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x005b, + 0xfffd, + 0x005d, + 0xfffd, + 0x005f, + 0x0490, + 0x0402, + 0x0403, + 0x0404, + 0x0401, + 0x0405, + 0x0406, + 0x0407, + 0x0408, + 0x0409, + 0x040a, + 0x040b, + 0x040c, + 0x040e, + 0x040f, + 0x042a, + 0x0462, + 0x0472, + 0x0474, + 0x046a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd2\x91", + "\xd1\x92", + "\xd1\x93", + "\xd1\x94", + "\xd1\x91", + "\xd1\x95", + "\xd1\x96", + "\xd1\x97", + "\xd1\x98", + "\xd1\x99", + "\xd1\x9a", + "\xd1\x9b", + "\xd1\x9c", + "\xd1\x9e", + "\xd1\x9f", + "\xef\xbf\xbd", + "\xd1\xa3", + "\xd1\xb3", + "\xd1\xb5", + "\xd1\xab", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x5b", + "\xef\xbf\xbd", + "\x5d", + "\xef\xbf\xbd", + "\x5f", + "\xd2\x90", + "\xd0\x82", + "\xd0\x83", + "\xd0\x84", + "\xd0\x81", + "\xd0\x85", + "\xd0\x86", + "\xd0\x87", + "\xd0\x88", + "\xd0\x89", + "\xd0\x8a", + "\xd0\x8b", + "\xd0\x8c", + "\xd0\x8e", + "\xd0\x8f", + "\xd0\xaa", + "\xd1\xa2", + "\xd1\xb2", + "\xd1\xb4", + "\xd1\xaa", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x0000005b => "\x5b", + 0x0000005d => "\x5d", + 0x0000005f => "\x5f", + 0x0000007f => "\x7f", + 0x00000401 => "\x64", + 0x00000402 => "\x61", + 0x00000403 => "\x62", + 0x00000404 => "\x63", + 0x00000405 => "\x65", + 0x00000406 => "\x66", + 0x00000407 => "\x67", + 0x00000408 => "\x68", + 0x00000409 => "\x69", + 0x0000040a => "\x6a", + 0x0000040b => "\x6b", + 0x0000040c => "\x6c", + 0x0000040e => "\x6d", + 0x0000040f => "\x6e", + 0x0000042a => "\x6f", + 0x00000451 => "\x44", + 0x00000452 => "\x41", + 0x00000453 => "\x42", + 0x00000454 => "\x43", + 0x00000455 => "\x45", + 0x00000456 => "\x46", + 0x00000457 => "\x47", + 0x00000458 => "\x48", + 0x00000459 => "\x49", + 0x0000045a => "\x4a", + 0x0000045b => "\x4b", + 0x0000045c => "\x4c", + 0x0000045e => "\x4d", + 0x0000045f => "\x4e", + 0x00000462 => "\x70", + 0x00000463 => "\x50", + 0x0000046a => "\x73", + 0x0000046b => "\x53", + 0x00000472 => "\x71", + 0x00000473 => "\x51", + 0x00000474 => "\x72", + 0x00000475 => "\x52", + 0x00000490 => "\x60", + 0x00000491 => "\x40", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_5427_EXT - Conversion routines for ISO_5427_EXT + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO_5427-EXT. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + repertoiremap: mnemonic,ds + source: ECMA registry + alias ISO-IR-54 + alias ISO_5427:1981 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 40 | 00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN + 41 | 00000452 | CYRILLIC SMALL LETTER DJE + 42 | 00000453 | CYRILLIC SMALL LETTER GJE + 43 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + 44 | 00000451 | CYRILLIC SMALL LETTER IO + 45 | 00000455 | CYRILLIC SMALL LETTER DZE + 46 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 47 | 00000457 | CYRILLIC SMALL LETTER YI + 48 | 00000458 | CYRILLIC SMALL LETTER JE + 49 | 00000459 | CYRILLIC SMALL LETTER LJE + 4A | 0000045A | CYRILLIC SMALL LETTER NJE + 4B | 0000045B | CYRILLIC SMALL LETTER TSHE + 4C | 0000045C | CYRILLIC SMALL LETTER KJE + 4D | 0000045E | CYRILLIC SMALL LETTER SHORT U + 4E | 0000045F | CYRILLIC SMALL LETTER DZHE + 50 | 00000463 | CYRILLIC SMALL LETTER YAT + 51 | 00000473 | CYRILLIC SMALL LETTER FITA + 52 | 00000475 | CYRILLIC SMALL LETTER IZHITSA + 53 | 0000046B | CYRILLIC SMALL LETTER BIG YUS + 5B | 0000005B | LEFT SQUARE BRACKET + 5D | 0000005D | RIGHT SQUARE BRACKET + 5F | 0000005F | LOW LINE + 60 | 00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN + 61 | 00000402 | CYRILLIC CAPITAL LETTER DJE + 62 | 00000403 | CYRILLIC CAPITAL LETTER GJE + 63 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + 64 | 00000401 | CYRILLIC CAPITAL LETTER IO + 65 | 00000405 | CYRILLIC CAPITAL LETTER DZE + 66 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 67 | 00000407 | CYRILLIC CAPITAL LETTER YI + 68 | 00000408 | CYRILLIC CAPITAL LETTER JE + 69 | 00000409 | CYRILLIC CAPITAL LETTER LJE + 6A | 0000040A | CYRILLIC CAPITAL LETTER NJE + 6B | 0000040B | CYRILLIC CAPITAL LETTER TSHE + 6C | 0000040C | CYRILLIC CAPITAL LETTER KJE + 6D | 0000040E | CYRILLIC CAPITAL LETTER SHORT U + 6E | 0000040F | CYRILLIC CAPITAL LETTER DZHE + 6F | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + 70 | 00000462 | CYRILLIC CAPITAL LETTER YAT + 71 | 00000472 | CYRILLIC CAPITAL LETTER FITA + 72 | 00000474 | CYRILLIC CAPITAL LETTER IZHITSA + 73 | 0000046A | CYRILLIC CAPITAL LETTER BIG YUS + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_5428.pm b/lib/Locale/RecodeData/ISO_5428.pm new file mode 100644 index 0000000..d429282 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_5428.pm @@ -0,0 +1,843 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO_5428. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_5428; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xe002, + 0xe003, + 0xe009, + 0xe005, + 0xe012, + 0xe013, + 0xe014, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00ab, + 0x00bb, + 0x201d, + 0x201c, + 0x0374, + 0x0375, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00b7, + 0xfffd, + 0xfffd, + 0xfffd, + 0x003b, + 0xfffd, + 0x0391, + 0x0392, + 0xfffd, + 0x0393, + 0x0394, + 0x0395, + 0x03da, + 0x03dc, + 0x0396, + 0x0397, + 0x0398, + 0x0399, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x039e, + 0x039f, + 0x03a0, + 0x03de, + 0x03a1, + 0x03a3, + 0xfffd, + 0x03a4, + 0x03a5, + 0x03a6, + 0x03a7, + 0x03a8, + 0x03a9, + 0x03e0, + 0xfffd, + 0xfffd, + 0x03b1, + 0x03b2, + 0x03d0, + 0x03b3, + 0x03b4, + 0x03b5, + 0xe01a, + 0xe01b, + 0x03b6, + 0x03b7, + 0x03b8, + 0x03b9, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03be, + 0x03bf, + 0x03c0, + 0xe01c, + 0x03c1, + 0x03c3, + 0x03c2, + 0x03c4, + 0x03c5, + 0x03c6, + 0x03c7, + 0x03c8, + 0x03c9, + 0xe01d, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\xee\x80\x82", + "\xee\x80\x83", + "\xee\x80\x89", + "\xee\x80\x85", + "\xee\x80\x92", + "\xee\x80\x93", + "\xee\x80\x94", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\x9d", + "\xe2\x80\x9c", + "\xcd\xb4", + "\xcd\xb5", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xb7", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\x3b", + "\xef\xbf\xbd", + "\xce\x91", + "\xce\x92", + "\xef\xbf\xbd", + "\xce\x93", + "\xce\x94", + "\xce\x95", + "\xcf\x9a", + "\xcf\x9c", + "\xce\x96", + "\xce\x97", + "\xce\x98", + "\xce\x99", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xce\x9e", + "\xce\x9f", + "\xce\xa0", + "\xcf\x9e", + "\xce\xa1", + "\xce\xa3", + "\xef\xbf\xbd", + "\xce\xa4", + "\xce\xa5", + "\xce\xa6", + "\xce\xa7", + "\xce\xa8", + "\xce\xa9", + "\xcf\xa0", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xce\xb1", + "\xce\xb2", + "\xcf\x90", + "\xce\xb3", + "\xce\xb4", + "\xce\xb5", + "\xee\x80\x9a", + "\xee\x80\x9b", + "\xce\xb6", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbe", + "\xce\xbf", + "\xcf\x80", + "\xee\x80\x9c", + "\xcf\x81", + "\xcf\x83", + "\xcf\x82", + "\xcf\x84", + "\xcf\x85", + "\xcf\x86", + "\xcf\x87", + "\xcf\x88", + "\xcf\x89", + "\xee\x80\x9d", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x0000003b => "\x3f", + 0x0000007f => "\x7f", + 0x000000ab => "\x30", + 0x000000b7 => "\x3b", + 0x000000bb => "\x31", + 0x00000374 => "\x34", + 0x00000375 => "\x35", + 0x00000391 => "\x41", + 0x00000392 => "\x42", + 0x00000393 => "\x44", + 0x00000394 => "\x45", + 0x00000395 => "\x46", + 0x00000396 => "\x49", + 0x00000397 => "\x4a", + 0x00000398 => "\x4b", + 0x00000399 => "\x4c", + 0x0000039a => "\x4d", + 0x0000039b => "\x4e", + 0x0000039c => "\x4f", + 0x0000039d => "\x50", + 0x0000039e => "\x51", + 0x0000039f => "\x52", + 0x000003a0 => "\x53", + 0x000003a1 => "\x55", + 0x000003a3 => "\x56", + 0x000003a4 => "\x58", + 0x000003a5 => "\x59", + 0x000003a6 => "\x5a", + 0x000003a7 => "\x5b", + 0x000003a8 => "\x5c", + 0x000003a9 => "\x5d", + 0x000003b1 => "\x61", + 0x000003b2 => "\x62", + 0x000003b3 => "\x64", + 0x000003b4 => "\x65", + 0x000003b5 => "\x66", + 0x000003b6 => "\x69", + 0x000003b7 => "\x6a", + 0x000003b8 => "\x6b", + 0x000003b9 => "\x6c", + 0x000003ba => "\x6d", + 0x000003bb => "\x6e", + 0x000003bc => "\x6f", + 0x000003bd => "\x70", + 0x000003be => "\x71", + 0x000003bf => "\x72", + 0x000003c0 => "\x73", + 0x000003c1 => "\x75", + 0x000003c2 => "\x77", + 0x000003c3 => "\x76", + 0x000003c4 => "\x78", + 0x000003c5 => "\x79", + 0x000003c6 => "\x7a", + 0x000003c7 => "\x7b", + 0x000003c8 => "\x7c", + 0x000003c9 => "\x7d", + 0x000003d0 => "\x63", + 0x000003da => "\x47", + 0x000003dc => "\x48", + 0x000003de => "\x54", + 0x000003e0 => "\x5e", + 0x0000201c => "\x33", + 0x0000201d => "\x32", + 0x0000e002 => "\x21", + 0x0000e003 => "\x22", + 0x0000e005 => "\x24", + 0x0000e009 => "\x23", + 0x0000e012 => "\x25", + 0x0000e013 => "\x26", + 0x0000e014 => "\x27", + 0x0000e01a => "\x67", + 0x0000e01b => "\x68", + 0x0000e01c => "\x74", + 0x0000e01d => "\x7e", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_5428 - Conversion routines for ISO_5428 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO_5428. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-55 + alias ISO_5428:1980 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 0000E002 | NON-SPACING GRAVE ACCENT EISO-IR-103_C1E (not a real character) + 22 | 0000E003 | NON-SPACING ACUTE ACCENT EISO-IR-103_C2E (not a real character) + 23 | 0000E009 | NON-SPACING DIAERESIS EISO-IR-103_C8E (not a real character) + 24 | 0000E005 | NON-SPACING TILDE EISO-IR-103_C4E (not a real character) + 25 | 0000E012 | GREEK NON-SPACING PSILI PNEUMATA EISO-IR-55_25E (not a real character) + 26 | 0000E013 | GREEK NON-SPACING DASIA PNEUMATA EISO-IR-55_26E (not a real character) + 27 | 0000E014 | GREEK NON-SPACING IOTA BELOW EISO-IR-55_27E (not a real character) + 30 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 31 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 32 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 33 | 0000201C | LEFT DOUBLE QUOTATION MARK + 34 | 00000374 | GREEK NUMERAL SIGN (Dexia keraia) + 35 | 00000375 | GREEK LOWER NUMERAL SIGN (Aristeri keraia) + 3B | 000000B7 | MIDDLE DOT + 3F | 0000003B | SEMICOLON + 41 | 00000391 | GREEK CAPITAL LETTER ALPHA + 42 | 00000392 | GREEK CAPITAL LETTER BETA + 44 | 00000393 | GREEK CAPITAL LETTER GAMMA + 45 | 00000394 | GREEK CAPITAL LETTER DELTA + 46 | 00000395 | GREEK CAPITAL LETTER EPSILON + 47 | 000003DA | GREEK LETTER STIGMA + 48 | 000003DC | GREEK LETTER DIGAMMA + 49 | 00000396 | GREEK CAPITAL LETTER ZETA + 4A | 00000397 | GREEK CAPITAL LETTER ETA + 4B | 00000398 | GREEK CAPITAL LETTER THETA + 4C | 00000399 | GREEK CAPITAL LETTER IOTA + 4D | 0000039A | GREEK CAPITAL LETTER KAPPA + 4E | 0000039B | GREEK CAPITAL LETTER LAMDA + 4F | 0000039C | GREEK CAPITAL LETTER MU + 50 | 0000039D | GREEK CAPITAL LETTER NU + 51 | 0000039E | GREEK CAPITAL LETTER XI + 52 | 0000039F | GREEK CAPITAL LETTER OMICRON + 53 | 000003A0 | GREEK CAPITAL LETTER PI + 54 | 000003DE | GREEK LETTER KOPPA + 55 | 000003A1 | GREEK CAPITAL LETTER RHO + 56 | 000003A3 | GREEK CAPITAL LETTER SIGMA + 58 | 000003A4 | GREEK CAPITAL LETTER TAU + 59 | 000003A5 | GREEK CAPITAL LETTER UPSILON + 5A | 000003A6 | GREEK CAPITAL LETTER PHI + 5B | 000003A7 | GREEK CAPITAL LETTER CHI + 5C | 000003A8 | GREEK CAPITAL LETTER PSI + 5D | 000003A9 | GREEK CAPITAL LETTER OMEGA + 5E | 000003E0 | GREEK LETTER SAMPI + 61 | 000003B1 | GREEK SMALL LETTER ALPHA + 62 | 000003B2 | GREEK SMALL LETTER BETA + 63 | 000003D0 | GREEK BETA SYMBOL + 64 | 000003B3 | GREEK SMALL LETTER GAMMA + 65 | 000003B4 | GREEK SMALL LETTER DELTA + 66 | 000003B5 | GREEK SMALL LETTER EPSILON + 67 | 0000E01A | GREEK SMALL LETTER STIGMA EISO-IR-55_47E + 68 | 0000E01B | GREEK SMALL LETTER DIGAMMA EISO-IR-55_48E + 69 | 000003B6 | GREEK SMALL LETTER ZETA + 6A | 000003B7 | GREEK SMALL LETTER ETA + 6B | 000003B8 | GREEK SMALL LETTER THETA + 6C | 000003B9 | GREEK SMALL LETTER IOTA + 6D | 000003BA | GREEK SMALL LETTER KAPPA + 6E | 000003BB | GREEK SMALL LETTER LAMDA + 6F | 000003BC | GREEK SMALL LETTER MU + 70 | 000003BD | GREEK SMALL LETTER NU + 71 | 000003BE | GREEK SMALL LETTER XI + 72 | 000003BF | GREEK SMALL LETTER OMICRON + 73 | 000003C0 | GREEK SMALL LETTER PI + 74 | 0000E01C | GREEK SMALL LETTER KOPPA EISO-IR-55_54E + 75 | 000003C1 | GREEK SMALL LETTER RHO + 76 | 000003C3 | GREEK SMALL LETTER SIGMA + 77 | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + 78 | 000003C4 | GREEK SMALL LETTER TAU + 79 | 000003C5 | GREEK SMALL LETTER UPSILON + 7A | 000003C6 | GREEK SMALL LETTER PHI + 7B | 000003C7 | GREEK SMALL LETTER CHI + 7C | 000003C8 | GREEK SMALL LETTER PSI + 7D | 000003C9 | GREEK SMALL LETTER OMEGA + 7E | 0000E01D | GREEK SMALL LETTER SAMPI EISO-IR-55_5EE + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_1.pm b/lib/Locale/RecodeData/ISO_8859_1.pm new file mode 100644 index 0000000..2ee3408 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_1.pm @@ -0,0 +1,608 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-1. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_1; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +use constant TO_UTF8 => [ + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc2\xaa", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc2\xb9", + "\xc2\xba", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xbf", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x90", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc3\x98", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x9d", + "\xc3\x9e", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb0", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbd", + "\xc3\xbe", + "\xc3\xbf", +]; + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + # FIXME: Maybe the lookup is cheaper than the call to chr(). + $_[1] = join '', + map $_ > 255 ? "\x3f" : chr $_, + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8') { + $_[1] = join '', map TO_UTF8->[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ unpack 'C*', $_[1] ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_1 - Conversion routines for ISO-8859-1 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module contains the conversion tables and routines for ISO-8859-1. + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000AA | FEMININE ORDINAL INDICATOR + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000BA | MASCULINE ORDINAL INDICATOR + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 000000D0 | LATIN CAPITAL LETTER ETH + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 000000DE | LATIN CAPITAL LETTER THORN + DF | 000000DF | LATIN SMALL LETTER SHARP S + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 000000F0 | LATIN SMALL LETTER ETH + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 000000FE | LATIN SMALL LETTER THORN + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_10.pm b/lib/Locale/RecodeData/ISO_8859_10.pm new file mode 100644 index 0000000..77f8961 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_10.pm @@ -0,0 +1,1144 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-10. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_10; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0104, + 0x0112, + 0x0122, + 0x012a, + 0x0128, + 0x0136, + 0x00a7, + 0x013b, + 0x0110, + 0x0160, + 0x0166, + 0x017d, + 0x00ad, + 0x016a, + 0x014a, + 0x00b0, + 0x0105, + 0x0113, + 0x0123, + 0x012b, + 0x0129, + 0x0137, + 0x00b7, + 0x013c, + 0x0111, + 0x0161, + 0x0167, + 0x017e, + 0x2015, + 0x016b, + 0x014b, + 0x0100, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x012e, + 0x010c, + 0x00c9, + 0x0118, + 0x00cb, + 0x0116, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00d0, + 0x0145, + 0x014c, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x0168, + 0x00d8, + 0x0172, + 0x00da, + 0x00db, + 0x00dc, + 0x00dd, + 0x00de, + 0x00df, + 0x0101, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x012f, + 0x010d, + 0x00e9, + 0x0119, + 0x00eb, + 0x0117, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00f0, + 0x0146, + 0x014d, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x0169, + 0x00f8, + 0x0173, + 0x00fa, + 0x00fb, + 0x00fc, + 0x00fd, + 0x00fe, + 0x0138, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc4\x84", + "\xc4\x92", + "\xc4\xa2", + "\xc4\xaa", + "\xc4\xa8", + "\xc4\xb6", + "\xc2\xa7", + "\xc4\xbb", + "\xc4\x90", + "\xc5\xa0", + "\xc5\xa6", + "\xc5\xbd", + "\xc2\xad", + "\xc5\xaa", + "\xc5\x8a", + "\xc2\xb0", + "\xc4\x85", + "\xc4\x93", + "\xc4\xa3", + "\xc4\xab", + "\xc4\xa9", + "\xc4\xb7", + "\xc2\xb7", + "\xc4\xbc", + "\xc4\x91", + "\xc5\xa1", + "\xc5\xa7", + "\xc5\xbe", + "\xe2\x80\x95", + "\xc5\xab", + "\xc5\x8b", + "\xc4\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc4\xae", + "\xc4\x8c", + "\xc3\x89", + "\xc4\x98", + "\xc3\x8b", + "\xc4\x96", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x90", + "\xc5\x85", + "\xc5\x8c", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc5\xa8", + "\xc3\x98", + "\xc5\xb2", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x9d", + "\xc3\x9e", + "\xc3\x9f", + "\xc4\x81", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc4\xaf", + "\xc4\x8d", + "\xc3\xa9", + "\xc4\x99", + "\xc3\xab", + "\xc4\x97", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb0", + "\xc5\x86", + "\xc5\x8d", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc5\xa9", + "\xc3\xb8", + "\xc5\xb3", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbd", + "\xc3\xbe", + "\xc4\xb8", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a7 => "\xa7", + 0x000000ad => "\xad", + 0x000000b0 => "\xb0", + 0x000000b7 => "\xb7", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c9 => "\xc9", + 0x000000cb => "\xcb", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d0 => "\xd0", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d8 => "\xd8", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000dd => "\xdd", + 0x000000de => "\xde", + 0x000000df => "\xdf", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e9 => "\xe9", + 0x000000eb => "\xeb", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f0 => "\xf0", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f8 => "\xf8", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x000000fe => "\xfe", + 0x00000100 => "\xc0", + 0x00000101 => "\xe0", + 0x00000104 => "\xa1", + 0x00000105 => "\xb1", + 0x0000010c => "\xc8", + 0x0000010d => "\xe8", + 0x00000110 => "\xa9", + 0x00000111 => "\xb9", + 0x00000112 => "\xa2", + 0x00000113 => "\xb2", + 0x00000116 => "\xcc", + 0x00000117 => "\xec", + 0x00000118 => "\xca", + 0x00000119 => "\xea", + 0x00000122 => "\xa3", + 0x00000123 => "\xb3", + 0x00000128 => "\xa5", + 0x00000129 => "\xb5", + 0x0000012a => "\xa4", + 0x0000012b => "\xb4", + 0x0000012e => "\xc7", + 0x0000012f => "\xe7", + 0x00000136 => "\xa6", + 0x00000137 => "\xb6", + 0x00000138 => "\xff", + 0x0000013b => "\xa8", + 0x0000013c => "\xb8", + 0x00000145 => "\xd1", + 0x00000146 => "\xf1", + 0x0000014a => "\xaf", + 0x0000014b => "\xbf", + 0x0000014c => "\xd2", + 0x0000014d => "\xf2", + 0x00000160 => "\xaa", + 0x00000161 => "\xba", + 0x00000166 => "\xab", + 0x00000167 => "\xbb", + 0x00000168 => "\xd7", + 0x00000169 => "\xf7", + 0x0000016a => "\xae", + 0x0000016b => "\xbe", + 0x00000172 => "\xd9", + 0x00000173 => "\xf9", + 0x0000017d => "\xac", + 0x0000017e => "\xbc", + 0x00002015 => "\xbd", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_10 - Conversion routines for ISO-8859-10 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-10. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-157 + alias ISO_8859-10:1992 + alias ISO_8859-10 + alias L6 + alias LATIN6 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + A2 | 00000112 | LATIN CAPITAL LETTER E WITH MACRON + A3 | 00000122 | LATIN CAPITAL LETTER G WITH CEDILLA + A4 | 0000012A | LATIN CAPITAL LETTER I WITH MACRON + A5 | 00000128 | LATIN CAPITAL LETTER I WITH TILDE + A6 | 00000136 | LATIN CAPITAL LETTER K WITH CEDILLA + A7 | 000000A7 | SECTION SIGN + A8 | 0000013B | LATIN CAPITAL LETTER L WITH CEDILLA + A9 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + AA | 00000160 | LATIN CAPITAL LETTER S WITH CARON + AB | 00000166 | LATIN CAPITAL LETTER T WITH STROKE + AC | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + AD | 000000AD | SOFT HYPHEN + AE | 0000016A | LATIN CAPITAL LETTER U WITH MACRON + AF | 0000014A | LATIN CAPITAL LETTER ENG (Sami) + B0 | 000000B0 | DEGREE SIGN + B1 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + B2 | 00000113 | LATIN SMALL LETTER E WITH MACRON + B3 | 00000123 | LATIN SMALL LETTER G WITH CEDILLA + B4 | 0000012B | LATIN SMALL LETTER I WITH MACRON + B5 | 00000129 | LATIN SMALL LETTER I WITH TILDE + B6 | 00000137 | LATIN SMALL LETTER K WITH CEDILLA + B7 | 000000B7 | MIDDLE DOT + B8 | 0000013C | LATIN SMALL LETTER L WITH CEDILLA + B9 | 00000111 | LATIN SMALL LETTER D WITH STROKE + BA | 00000161 | LATIN SMALL LETTER S WITH CARON + BB | 00000167 | LATIN SMALL LETTER T WITH STROKE + BC | 0000017E | LATIN SMALL LETTER Z WITH CARON + BD | 00002015 | HORIZONTAL BAR + BE | 0000016B | LATIN SMALL LETTER U WITH MACRON + BF | 0000014B | LATIN SMALL LETTER ENG (Sami) + C0 | 00000100 | LATIN CAPITAL LETTER A WITH MACRON + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 0000012E | LATIN CAPITAL LETTER I WITH OGONEK + C8 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 00000116 | LATIN CAPITAL LETTER E WITH DOT ABOVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + D1 | 00000145 | LATIN CAPITAL LETTER N WITH CEDILLA + D2 | 0000014C | LATIN CAPITAL LETTER O WITH MACRON + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 00000168 | LATIN CAPITAL LETTER U WITH TILDE + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 00000172 | LATIN CAPITAL LETTER U WITH OGONEK + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 00000101 | LATIN SMALL LETTER A WITH MACRON + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 0000012F | LATIN SMALL LETTER I WITH OGONEK + E8 | 0000010D | LATIN SMALL LETTER C WITH CARON + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 00000119 | LATIN SMALL LETTER E WITH OGONEK + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 00000117 | LATIN SMALL LETTER E WITH DOT ABOVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + F1 | 00000146 | LATIN SMALL LETTER N WITH CEDILLA + F2 | 0000014D | LATIN SMALL LETTER O WITH MACRON + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 00000169 | LATIN SMALL LETTER U WITH TILDE + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 00000173 | LATIN SMALL LETTER U WITH OGONEK + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + FF | 00000138 | LATIN SMALL LETTER KRA (Greenlandic) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_11.pm b/lib/Locale/RecodeData/ISO_8859_11.pm new file mode 100644 index 0000000..85efccb --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_11.pm @@ -0,0 +1,1064 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-11. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_11; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a0, + 0x0e01, + 0x0e02, + 0x0e03, + 0x0e04, + 0x0e05, + 0x0e06, + 0x0e07, + 0x0e08, + 0x0e09, + 0x0e0a, + 0x0e0b, + 0x0e0c, + 0x0e0d, + 0x0e0e, + 0x0e0f, + 0x0e10, + 0x0e11, + 0x0e12, + 0x0e13, + 0x0e14, + 0x0e15, + 0x0e16, + 0x0e17, + 0x0e18, + 0x0e19, + 0x0e1a, + 0x0e1b, + 0x0e1c, + 0x0e1d, + 0x0e1e, + 0x0e1f, + 0x0e20, + 0x0e21, + 0x0e22, + 0x0e23, + 0x0e24, + 0x0e25, + 0x0e26, + 0x0e27, + 0x0e28, + 0x0e29, + 0x0e2a, + 0x0e2b, + 0x0e2c, + 0x0e2d, + 0x0e2e, + 0x0e2f, + 0x0e30, + 0x0e31, + 0x0e32, + 0x0e33, + 0x0e34, + 0x0e35, + 0x0e36, + 0x0e37, + 0x0e38, + 0x0e39, + 0x0e3a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0e3f, + 0x0e40, + 0x0e41, + 0x0e42, + 0x0e43, + 0x0e44, + 0x0e45, + 0x0e46, + 0x0e47, + 0x0e48, + 0x0e49, + 0x0e4a, + 0x0e4b, + 0x0e4c, + 0x0e4d, + 0x0e4e, + 0x0e4f, + 0x0e50, + 0x0e51, + 0x0e52, + 0x0e53, + 0x0e54, + 0x0e55, + 0x0e56, + 0x0e57, + 0x0e58, + 0x0e59, + 0x0e5a, + 0x0e5b, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa0", + "\xe0\xb8\x81", + "\xe0\xb8\x82", + "\xe0\xb8\x83", + "\xe0\xb8\x84", + "\xe0\xb8\x85", + "\xe0\xb8\x86", + "\xe0\xb8\x87", + "\xe0\xb8\x88", + "\xe0\xb8\x89", + "\xe0\xb8\x8a", + "\xe0\xb8\x8b", + "\xe0\xb8\x8c", + "\xe0\xb8\x8d", + "\xe0\xb8\x8e", + "\xe0\xb8\x8f", + "\xe0\xb8\x90", + "\xe0\xb8\x91", + "\xe0\xb8\x92", + "\xe0\xb8\x93", + "\xe0\xb8\x94", + "\xe0\xb8\x95", + "\xe0\xb8\x96", + "\xe0\xb8\x97", + "\xe0\xb8\x98", + "\xe0\xb8\x99", + "\xe0\xb8\x9a", + "\xe0\xb8\x9b", + "\xe0\xb8\x9c", + "\xe0\xb8\x9d", + "\xe0\xb8\x9e", + "\xe0\xb8\x9f", + "\xe0\xb8\xa0", + "\xe0\xb8\xa1", + "\xe0\xb8\xa2", + "\xe0\xb8\xa3", + "\xe0\xb8\xa4", + "\xe0\xb8\xa5", + "\xe0\xb8\xa6", + "\xe0\xb8\xa7", + "\xe0\xb8\xa8", + "\xe0\xb8\xa9", + "\xe0\xb8\xaa", + "\xe0\xb8\xab", + "\xe0\xb8\xac", + "\xe0\xb8\xad", + "\xe0\xb8\xae", + "\xe0\xb8\xaf", + "\xe0\xb8\xb0", + "\xe0\xb8\xb1", + "\xe0\xb8\xb2", + "\xe0\xb8\xb3", + "\xe0\xb8\xb4", + "\xe0\xb8\xb5", + "\xe0\xb8\xb6", + "\xe0\xb8\xb7", + "\xe0\xb8\xb8", + "\xe0\xb8\xb9", + "\xe0\xb8\xba", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe0\xb8\xbf", + "\xe0\xb9\x80", + "\xe0\xb9\x81", + "\xe0\xb9\x82", + "\xe0\xb9\x83", + "\xe0\xb9\x84", + "\xe0\xb9\x85", + "\xe0\xb9\x86", + "\xe0\xb9\x87", + "\xe0\xb9\x88", + "\xe0\xb9\x89", + "\xe0\xb9\x8a", + "\xe0\xb9\x8b", + "\xe0\xb9\x8c", + "\xe0\xb9\x8d", + "\xe0\xb9\x8e", + "\xe0\xb9\x8f", + "\xe0\xb9\x90", + "\xe0\xb9\x91", + "\xe0\xb9\x92", + "\xe0\xb9\x93", + "\xe0\xb9\x94", + "\xe0\xb9\x95", + "\xe0\xb9\x96", + "\xe0\xb9\x97", + "\xe0\xb9\x98", + "\xe0\xb9\x99", + "\xe0\xb9\x9a", + "\xe0\xb9\x9b", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x00000e01 => "\xa1", + 0x00000e02 => "\xa2", + 0x00000e03 => "\xa3", + 0x00000e04 => "\xa4", + 0x00000e05 => "\xa5", + 0x00000e06 => "\xa6", + 0x00000e07 => "\xa7", + 0x00000e08 => "\xa8", + 0x00000e09 => "\xa9", + 0x00000e0a => "\xaa", + 0x00000e0b => "\xab", + 0x00000e0c => "\xac", + 0x00000e0d => "\xad", + 0x00000e0e => "\xae", + 0x00000e0f => "\xaf", + 0x00000e10 => "\xb0", + 0x00000e11 => "\xb1", + 0x00000e12 => "\xb2", + 0x00000e13 => "\xb3", + 0x00000e14 => "\xb4", + 0x00000e15 => "\xb5", + 0x00000e16 => "\xb6", + 0x00000e17 => "\xb7", + 0x00000e18 => "\xb8", + 0x00000e19 => "\xb9", + 0x00000e1a => "\xba", + 0x00000e1b => "\xbb", + 0x00000e1c => "\xbc", + 0x00000e1d => "\xbd", + 0x00000e1e => "\xbe", + 0x00000e1f => "\xbf", + 0x00000e20 => "\xc0", + 0x00000e21 => "\xc1", + 0x00000e22 => "\xc2", + 0x00000e23 => "\xc3", + 0x00000e24 => "\xc4", + 0x00000e25 => "\xc5", + 0x00000e26 => "\xc6", + 0x00000e27 => "\xc7", + 0x00000e28 => "\xc8", + 0x00000e29 => "\xc9", + 0x00000e2a => "\xca", + 0x00000e2b => "\xcb", + 0x00000e2c => "\xcc", + 0x00000e2d => "\xcd", + 0x00000e2e => "\xce", + 0x00000e2f => "\xcf", + 0x00000e30 => "\xd0", + 0x00000e31 => "\xd1", + 0x00000e32 => "\xd2", + 0x00000e33 => "\xd3", + 0x00000e34 => "\xd4", + 0x00000e35 => "\xd5", + 0x00000e36 => "\xd6", + 0x00000e37 => "\xd7", + 0x00000e38 => "\xd8", + 0x00000e39 => "\xd9", + 0x00000e3a => "\xda", + 0x00000e3f => "\xdf", + 0x00000e40 => "\xe0", + 0x00000e41 => "\xe1", + 0x00000e42 => "\xe2", + 0x00000e43 => "\xe3", + 0x00000e44 => "\xe4", + 0x00000e45 => "\xe5", + 0x00000e46 => "\xe6", + 0x00000e47 => "\xe7", + 0x00000e48 => "\xe8", + 0x00000e49 => "\xe9", + 0x00000e4a => "\xea", + 0x00000e4b => "\xeb", + 0x00000e4c => "\xec", + 0x00000e4d => "\xed", + 0x00000e4e => "\xee", + 0x00000e4f => "\xef", + 0x00000e50 => "\xf0", + 0x00000e51 => "\xf1", + 0x00000e52 => "\xf2", + 0x00000e53 => "\xf3", + 0x00000e54 => "\xf4", + 0x00000e55 => "\xf5", + 0x00000e56 => "\xf6", + 0x00000e57 => "\xf7", + 0x00000e58 => "\xf8", + 0x00000e59 => "\xf9", + 0x00000e5a => "\xfa", + 0x00000e5b => "\xfb", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_11 - Conversion routines for ISO-8859-11 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-11. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + source: Guido Flohr Eguido.flohr@cantanea.comE + + The encoding ISO-8859-11 is not yet official at the time of this writing. + It is based on TIS-620, but with the addition of the non-breaking space. + + The mapping of 0xfc-0xff is identical to Latin-1 but this should be + checked. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000E01 | THAI CHARACTER KO KAI + A2 | 00000E02 | THAI CHARACTER KHO KHAI + A3 | 00000E03 | THAI CHARACTER KHO KHUAT + A4 | 00000E04 | THAI CHARACTER KHO KHWAI + A5 | 00000E05 | THAI CHARACTER KHO KHON + A6 | 00000E06 | THAI CHARACTER KHO RAKHANG + A7 | 00000E07 | THAI CHARACTER NGO NGU + A8 | 00000E08 | THAI CHARACTER CHO CHAN + A9 | 00000E09 | THAI CHARACTER CHO CHING + AA | 00000E0A | THAI CHARACTER CHO CHANG + AB | 00000E0B | THAI CHARACTER SO SO + AC | 00000E0C | THAI CHARACTER CHO CHOE + AD | 00000E0D | THAI CHARACTER YO YING + AE | 00000E0E | THAI CHARACTER DO CHADA + AF | 00000E0F | THAI CHARACTER TO PATAK + B0 | 00000E10 | THAI CHARACTER THO THAN + B1 | 00000E11 | THAI CHARACTER THO NANGMONTHO + B2 | 00000E12 | THAI CHARACTER THO PHUTHAO + B3 | 00000E13 | THAI CHARACTER NO NEN + B4 | 00000E14 | THAI CHARACTER DO DEK + B5 | 00000E15 | THAI CHARACTER TO TAO + B6 | 00000E16 | THAI CHARACTER THO THUNG + B7 | 00000E17 | THAI CHARACTER THO THAHAN + B8 | 00000E18 | THAI CHARACTER THO THONG + B9 | 00000E19 | THAI CHARACTER NO NU + BA | 00000E1A | THAI CHARACTER BO BAIMAI + BB | 00000E1B | THAI CHARACTER PO PLA + BC | 00000E1C | THAI CHARACTER PHO PHUNG + BD | 00000E1D | THAI CHARACTER FO FA + BE | 00000E1E | THAI CHARACTER PHO PHAN + BF | 00000E1F | THAI CHARACTER FO FAN + C0 | 00000E20 | THAI CHARACTER PHO SAMPHAO + C1 | 00000E21 | THAI CHARACTER MO MA + C2 | 00000E22 | THAI CHARACTER YO YAK + C3 | 00000E23 | THAI CHARACTER RO RUA + C4 | 00000E24 | THAI CHARACTER RU + C5 | 00000E25 | THAI CHARACTER LO LING + C6 | 00000E26 | THAI CHARACTER LU + C7 | 00000E27 | THAI CHARACTER WO WAEN + C8 | 00000E28 | THAI CHARACTER SO SALA + C9 | 00000E29 | THAI CHARACTER SO RUSI + CA | 00000E2A | THAI CHARACTER SO SUA + CB | 00000E2B | THAI CHARACTER HO HIP + CC | 00000E2C | THAI CHARACTER LO CHULA + CD | 00000E2D | THAI CHARACTER O ANG + CE | 00000E2E | THAI CHARACTER HO NOKHUK + CF | 00000E2F | THAI CHARACTER PAIYANNOI + D0 | 00000E30 | THAI CHARACTER SARA A + D1 | 00000E31 | THAI CHARACTER MAI HAN-AKAT + D2 | 00000E32 | THAI CHARACTER SARA AA + D3 | 00000E33 | THAI CHARACTER SARA AM + D4 | 00000E34 | THAI CHARACTER SARA I + D5 | 00000E35 | THAI CHARACTER SARA II + D6 | 00000E36 | THAI CHARACTER SARA UE + D7 | 00000E37 | THAI CHARACTER SARA UEE + D8 | 00000E38 | THAI CHARACTER SARA U + D9 | 00000E39 | THAI CHARACTER SARA UU + DA | 00000E3A | THAI CHARACTER PHINTHU + DF | 00000E3F | THAI CHARACTER SYMBOL BAHT + E0 | 00000E40 | THAI CHARACTER SARA E + E1 | 00000E41 | THAI CHARACTER SARA AE + E2 | 00000E42 | THAI CHARACTER SARA O + E3 | 00000E43 | THAI CHARACTER SARA AI MAIMUAN + E4 | 00000E44 | THAI CHARACTER SARA AI MAIMALAI + E5 | 00000E45 | THAI CHARACTER LAKKHANGYAO + E6 | 00000E46 | THAI CHARACTER MAIYAMOK + E7 | 00000E47 | THAI CHARACTER MAITAIKHU + E8 | 00000E48 | THAI CHARACTER MAI EK + E9 | 00000E49 | THAI CHARACTER MAI THO + EA | 00000E4A | THAI CHARACTER MAI TRI + EB | 00000E4B | THAI CHARACTER MAI CHATTAWA + EC | 00000E4C | THAI CHARACTER THANTHAKHAT + ED | 00000E4D | THAI CHARACTER NIKHAHIT + EE | 00000E4E | THAI CHARACTER YAMAKKAN + EF | 00000E4F | THAI CHARACTER FONGMAN + F0 | 00000E50 | THAI DIGIT ZERO + F1 | 00000E51 | THAI DIGIT ONE + F2 | 00000E52 | THAI DIGIT TWO + F3 | 00000E53 | THAI DIGIT THREE + F4 | 00000E54 | THAI DIGIT FOUR + F5 | 00000E55 | THAI DIGIT FIVE + F6 | 00000E56 | THAI DIGIT SIX + F7 | 00000E57 | THAI DIGIT SEVEN + F8 | 00000E58 | THAI DIGIT EIGHT + F9 | 00000E59 | THAI DIGIT NINE + FA | 00000E5A | THAI CHARACTER ANGKHANKHU + FB | 00000E5B | THAI CHARACTER KHOMUT + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_13.pm b/lib/Locale/RecodeData/ISO_8859_13.pm new file mode 100644 index 0000000..69da269 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_13.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-13. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_13; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x201d, + 0x00a2, + 0x00a3, + 0x00a4, + 0x201e, + 0x00a6, + 0x00a7, + 0x00d8, + 0x00a9, + 0x0156, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00c6, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x201c, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00f8, + 0x00b9, + 0x0157, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0x00e6, + 0x0104, + 0x012e, + 0x0100, + 0x0106, + 0x00c4, + 0x00c5, + 0x0118, + 0x0112, + 0x010c, + 0x00c9, + 0x0179, + 0x0116, + 0x0122, + 0x0136, + 0x012a, + 0x013b, + 0x0160, + 0x0143, + 0x0145, + 0x00d3, + 0x014c, + 0x00d5, + 0x00d6, + 0x00d7, + 0x0172, + 0x0141, + 0x015a, + 0x016a, + 0x00dc, + 0x017b, + 0x017d, + 0x00df, + 0x0105, + 0x012f, + 0x0101, + 0x0107, + 0x00e4, + 0x00e5, + 0x0119, + 0x0113, + 0x010d, + 0x00e9, + 0x017a, + 0x0117, + 0x0123, + 0x0137, + 0x012b, + 0x013c, + 0x0161, + 0x0144, + 0x0146, + 0x00f3, + 0x014d, + 0x00f5, + 0x00f6, + 0x00f7, + 0x0173, + 0x0142, + 0x015b, + 0x016b, + 0x00fc, + 0x017c, + 0x017e, + 0x2019, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xe2\x80\x9d", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xe2\x80\x9e", + "\xc2\xa6", + "\xc2\xa7", + "\xc3\x98", + "\xc2\xa9", + "\xc5\x96", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc3\x86", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xe2\x80\x9c", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc3\xb8", + "\xc2\xb9", + "\xc5\x97", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc3\xa6", + "\xc4\x84", + "\xc4\xae", + "\xc4\x80", + "\xc4\x86", + "\xc3\x84", + "\xc3\x85", + "\xc4\x98", + "\xc4\x92", + "\xc4\x8c", + "\xc3\x89", + "\xc5\xb9", + "\xc4\x96", + "\xc4\xa2", + "\xc4\xb6", + "\xc4\xaa", + "\xc4\xbb", + "\xc5\xa0", + "\xc5\x83", + "\xc5\x85", + "\xc3\x93", + "\xc5\x8c", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc5\xb2", + "\xc5\x81", + "\xc5\x9a", + "\xc5\xaa", + "\xc3\x9c", + "\xc5\xbb", + "\xc5\xbd", + "\xc3\x9f", + "\xc4\x85", + "\xc4\xaf", + "\xc4\x81", + "\xc4\x87", + "\xc3\xa4", + "\xc3\xa5", + "\xc4\x99", + "\xc4\x93", + "\xc4\x8d", + "\xc3\xa9", + "\xc5\xba", + "\xc4\x97", + "\xc4\xa3", + "\xc4\xb7", + "\xc4\xab", + "\xc4\xbc", + "\xc5\xa1", + "\xc5\x84", + "\xc5\x86", + "\xc3\xb3", + "\xc5\x8d", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc5\xb3", + "\xc5\x82", + "\xc5\x9b", + "\xc5\xab", + "\xc3\xbc", + "\xc5\xbc", + "\xc5\xbe", + "\xe2\x80\x99", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b9 => "\xb9", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xaf", + 0x000000c9 => "\xc9", + 0x000000d3 => "\xd3", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d8 => "\xa8", + 0x000000dc => "\xdc", + 0x000000df => "\xdf", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xbf", + 0x000000e9 => "\xe9", + 0x000000f3 => "\xf3", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xb8", + 0x000000fc => "\xfc", + 0x00000100 => "\xc2", + 0x00000101 => "\xe2", + 0x00000104 => "\xc0", + 0x00000105 => "\xe0", + 0x00000106 => "\xc3", + 0x00000107 => "\xe3", + 0x0000010c => "\xc8", + 0x0000010d => "\xe8", + 0x00000112 => "\xc7", + 0x00000113 => "\xe7", + 0x00000116 => "\xcb", + 0x00000117 => "\xeb", + 0x00000118 => "\xc6", + 0x00000119 => "\xe6", + 0x00000122 => "\xcc", + 0x00000123 => "\xec", + 0x0000012a => "\xce", + 0x0000012b => "\xee", + 0x0000012e => "\xc1", + 0x0000012f => "\xe1", + 0x00000136 => "\xcd", + 0x00000137 => "\xed", + 0x0000013b => "\xcf", + 0x0000013c => "\xef", + 0x00000141 => "\xd9", + 0x00000142 => "\xf9", + 0x00000143 => "\xd1", + 0x00000144 => "\xf1", + 0x00000145 => "\xd2", + 0x00000146 => "\xf2", + 0x0000014c => "\xd4", + 0x0000014d => "\xf4", + 0x00000156 => "\xaa", + 0x00000157 => "\xba", + 0x0000015a => "\xda", + 0x0000015b => "\xfa", + 0x00000160 => "\xd0", + 0x00000161 => "\xf0", + 0x0000016a => "\xdb", + 0x0000016b => "\xfb", + 0x00000172 => "\xd8", + 0x00000173 => "\xf8", + 0x00000179 => "\xca", + 0x0000017a => "\xea", + 0x0000017b => "\xdd", + 0x0000017c => "\xfd", + 0x0000017d => "\xde", + 0x0000017e => "\xfe", + 0x00002019 => "\xff", + 0x0000201c => "\xb4", + 0x0000201d => "\xa1", + 0x0000201e => "\xa5", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_13 - Conversion routines for ISO-8859-13 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-13. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + automatically generated from the charDB + alias ISO-IR-179 + alias LATIN7 + alias L7 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 0000201D | RIGHT DOUBLE QUOTATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00000156 | LATIN CAPITAL LETTER R WITH CEDILLA + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000C6 | LATIN CAPITAL LETTER AE + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 0000201C | LEFT DOUBLE QUOTATION MARK + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 00000157 | LATIN SMALL LETTER R WITH CEDILLA + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 000000E6 | LATIN SMALL LETTER AE + C0 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + C1 | 0000012E | LATIN CAPITAL LETTER I WITH OGONEK + C2 | 00000100 | LATIN CAPITAL LETTER A WITH MACRON + C3 | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK + C7 | 00000112 | LATIN CAPITAL LETTER E WITH MACRON + C8 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 00000179 | LATIN CAPITAL LETTER Z WITH ACUTE + CB | 00000116 | LATIN CAPITAL LETTER E WITH DOT ABOVE + CC | 00000122 | LATIN CAPITAL LETTER G WITH CEDILLA + CD | 00000136 | LATIN CAPITAL LETTER K WITH CEDILLA + CE | 0000012A | LATIN CAPITAL LETTER I WITH MACRON + CF | 0000013B | LATIN CAPITAL LETTER L WITH CEDILLA + D0 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + D1 | 00000143 | LATIN CAPITAL LETTER N WITH ACUTE + D2 | 00000145 | LATIN CAPITAL LETTER N WITH CEDILLA + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 0000014C | LATIN CAPITAL LETTER O WITH MACRON + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 00000172 | LATIN CAPITAL LETTER U WITH OGONEK + D9 | 00000141 | LATIN CAPITAL LETTER L WITH STROKE + DA | 0000015A | LATIN CAPITAL LETTER S WITH ACUTE + DB | 0000016A | LATIN CAPITAL LETTER U WITH MACRON + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + DE | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + DF | 000000DF | LATIN SMALL LETTER SHARP S + E0 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + E1 | 0000012F | LATIN SMALL LETTER I WITH OGONEK + E2 | 00000101 | LATIN SMALL LETTER A WITH MACRON + E3 | 00000107 | LATIN SMALL LETTER C WITH ACUTE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 00000119 | LATIN SMALL LETTER E WITH OGONEK + E7 | 00000113 | LATIN SMALL LETTER E WITH MACRON + E8 | 0000010D | LATIN SMALL LETTER C WITH CARON + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 0000017A | LATIN SMALL LETTER Z WITH ACUTE + EB | 00000117 | LATIN SMALL LETTER E WITH DOT ABOVE + EC | 00000123 | LATIN SMALL LETTER G WITH CEDILLA + ED | 00000137 | LATIN SMALL LETTER K WITH CEDILLA + EE | 0000012B | LATIN SMALL LETTER I WITH MACRON + EF | 0000013C | LATIN SMALL LETTER L WITH CEDILLA + F0 | 00000161 | LATIN SMALL LETTER S WITH CARON + F1 | 00000144 | LATIN SMALL LETTER N WITH ACUTE + F2 | 00000146 | LATIN SMALL LETTER N WITH CEDILLA + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 0000014D | LATIN SMALL LETTER O WITH MACRON + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 00000173 | LATIN SMALL LETTER U WITH OGONEK + F9 | 00000142 | LATIN SMALL LETTER L WITH STROKE + FA | 0000015B | LATIN SMALL LETTER S WITH ACUTE + FB | 0000016B | LATIN SMALL LETTER U WITH MACRON + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + FE | 0000017E | LATIN SMALL LETTER Z WITH CARON + FF | 00002019 | RIGHT SINGLE QUOTATION MARK + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_14.pm b/lib/Locale/RecodeData/ISO_8859_14.pm new file mode 100644 index 0000000..5502db7 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_14.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-14. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_14; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x1e02, + 0x1e03, + 0x00a3, + 0x010a, + 0x010b, + 0x1e0a, + 0x00a7, + 0x1e80, + 0x00a9, + 0x1e82, + 0x1e0b, + 0x1ef2, + 0x00ad, + 0x00ae, + 0x0178, + 0x1e1e, + 0x1e1f, + 0x0120, + 0x0121, + 0x1e40, + 0x1e41, + 0x00b6, + 0x1e56, + 0x1e81, + 0x1e57, + 0x1e83, + 0x1e60, + 0x1ef3, + 0x1e84, + 0x1e85, + 0x1e61, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0x0174, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x1e6a, + 0x00d8, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x00dd, + 0x0176, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x0175, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x1e6b, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x00fd, + 0x0177, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xe1\xb8\x82", + "\xe1\xb8\x83", + "\xc2\xa3", + "\xc4\x8a", + "\xc4\x8b", + "\xe1\xb8\x8a", + "\xc2\xa7", + "\xe1\xba\x80", + "\xc2\xa9", + "\xe1\xba\x82", + "\xe1\xb8\x8b", + "\xe1\xbb\xb2", + "\xc2\xad", + "\xc2\xae", + "\xc5\xb8", + "\xe1\xb8\x9e", + "\xe1\xb8\x9f", + "\xc4\xa0", + "\xc4\xa1", + "\xe1\xb9\x80", + "\xe1\xb9\x81", + "\xc2\xb6", + "\xe1\xb9\x96", + "\xe1\xba\x81", + "\xe1\xb9\x97", + "\xe1\xba\x83", + "\xe1\xb9\xa0", + "\xe1\xbb\xb3", + "\xe1\xba\x84", + "\xe1\xba\x85", + "\xe1\xb9\xa1", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc5\xb4", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xe1\xb9\xaa", + "\xc3\x98", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x9d", + "\xc5\xb6", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc5\xb5", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xe1\xb9\xab", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbd", + "\xc5\xb7", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a3 => "\xa3", + 0x000000a7 => "\xa7", + 0x000000a9 => "\xa9", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000b6 => "\xb6", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d1 => "\xd1", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d8 => "\xd8", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000dd => "\xdd", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x000000ff => "\xff", + 0x0000010a => "\xa4", + 0x0000010b => "\xa5", + 0x00000120 => "\xb2", + 0x00000121 => "\xb3", + 0x00000174 => "\xd0", + 0x00000175 => "\xf0", + 0x00000176 => "\xde", + 0x00000177 => "\xfe", + 0x00000178 => "\xaf", + 0x00001e02 => "\xa1", + 0x00001e03 => "\xa2", + 0x00001e0a => "\xa6", + 0x00001e0b => "\xab", + 0x00001e1e => "\xb0", + 0x00001e1f => "\xb1", + 0x00001e40 => "\xb4", + 0x00001e41 => "\xb5", + 0x00001e56 => "\xb7", + 0x00001e57 => "\xb9", + 0x00001e60 => "\xbb", + 0x00001e61 => "\xbf", + 0x00001e6a => "\xd7", + 0x00001e6b => "\xf7", + 0x00001e80 => "\xa8", + 0x00001e81 => "\xb8", + 0x00001e82 => "\xaa", + 0x00001e83 => "\xba", + 0x00001e84 => "\xbd", + 0x00001e85 => "\xbe", + 0x00001ef2 => "\xac", + 0x00001ef3 => "\xbc", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_14 - Conversion routines for ISO-8859-14 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-14. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + automatically generated from the charDB + alias LATIN8 + alias L8 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00001E02 | LATIN CAPITAL LETTER B WITH DOT ABOVE + A2 | 00001E03 | LATIN SMALL LETTER B WITH DOT ABOVE + A3 | 000000A3 | POUND SIGN + A4 | 0000010A | LATIN CAPITAL LETTER C WITH DOT ABOVE + A5 | 0000010B | LATIN SMALL LETTER C WITH DOT ABOVE + A6 | 00001E0A | LATIN CAPITAL LETTER D WITH DOT ABOVE + A7 | 000000A7 | SECTION SIGN + A8 | 00001E80 | LATIN CAPITAL LETTER W WITH GRAVE + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00001E82 | LATIN CAPITAL LETTER W WITH ACUTE + AB | 00001E0B | LATIN SMALL LETTER D WITH DOT ABOVE + AC | 00001EF2 | LATIN CAPITAL LETTER Y WITH GRAVE + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + B0 | 00001E1E | LATIN CAPITAL LETTER F WITH DOT ABOVE + B1 | 00001E1F | LATIN SMALL LETTER F WITH DOT ABOVE + B2 | 00000120 | LATIN CAPITAL LETTER G WITH DOT ABOVE + B3 | 00000121 | LATIN SMALL LETTER G WITH DOT ABOVE + B4 | 00001E40 | LATIN CAPITAL LETTER M WITH DOT ABOVE + B5 | 00001E41 | LATIN SMALL LETTER M WITH DOT ABOVE + B6 | 000000B6 | PILCROW SIGN + B7 | 00001E56 | LATIN CAPITAL LETTER P WITH DOT ABOVE + B8 | 00001E81 | LATIN SMALL LETTER W WITH GRAVE + B9 | 00001E57 | LATIN SMALL LETTER P WITH DOT ABOVE + BA | 00001E83 | LATIN SMALL LETTER W WITH ACUTE + BB | 00001E60 | LATIN CAPITAL LETTER S WITH DOT ABOVE + BC | 00001EF3 | LATIN SMALL LETTER Y WITH GRAVE + BD | 00001E84 | LATIN CAPITAL LETTER W WITH DIAERESIS + BE | 00001E85 | LATIN SMALL LETTER W WITH DIAERESIS + BF | 00001E61 | LATIN SMALL LETTER S WITH DOT ABOVE + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 00000174 | LATIN CAPITAL LETTER W WITH CIRCUMFLEX + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 00001E6A | LATIN CAPITAL LETTER T WITH DOT ABOVE + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 00000176 | LATIN CAPITAL LETTER Y WITH CIRCUMFLEX + DF | 000000DF | LATIN SMALL LETTER SHARP S + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 00000175 | LATIN SMALL LETTER W WITH CIRCUMFLEX + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 00001E6B | LATIN SMALL LETTER T WITH DOT ABOVE + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 00000177 | LATIN SMALL LETTER Y WITH CIRCUMFLEX + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_15.pm b/lib/Locale/RecodeData/ISO_8859_15.pm new file mode 100644 index 0000000..5d6ee0b --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_15.pm @@ -0,0 +1,1138 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-15. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_15; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00a1, + 0x00a2, + 0x00a3, + 0x20ac, + 0x00a5, + 0x0160, + 0x00a7, + 0x0161, + 0x00a9, + 0x00aa, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00af, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x017d, + 0x00b5, + 0x00b6, + 0x00b7, + 0x017e, + 0x00b9, + 0x00ba, + 0x00bb, + 0x0152, + 0x0153, + 0x0178, + 0x00bf, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00d0, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x00d7, + 0x00d8, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x00dd, + 0x00de, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00f0, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00f7, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x00fd, + 0x00fe, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xe2\x82\xac", + "\xc2\xa5", + "\xc5\xa0", + "\xc2\xa7", + "\xc5\xa1", + "\xc2\xa9", + "\xc2\xaa", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc5\xbd", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc5\xbe", + "\xc2\xb9", + "\xc2\xba", + "\xc2\xbb", + "\xc5\x92", + "\xc5\x93", + "\xc5\xb8", + "\xc2\xbf", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x90", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc3\x98", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x9d", + "\xc3\x9e", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb0", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbd", + "\xc3\xbe", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a1 => "\xa1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a5 => "\xa5", + 0x000000a7 => "\xa7", + 0x000000a9 => "\xa9", + 0x000000aa => "\xaa", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b9 => "\xb9", + 0x000000ba => "\xba", + 0x000000bb => "\xbb", + 0x000000bf => "\xbf", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d0 => "\xd0", + 0x000000d1 => "\xd1", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d8 => "\xd8", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000dd => "\xdd", + 0x000000de => "\xde", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f0 => "\xf0", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x000000fe => "\xfe", + 0x000000ff => "\xff", + 0x00000152 => "\xbc", + 0x00000153 => "\xbd", + 0x00000160 => "\xa6", + 0x00000161 => "\xa8", + 0x00000178 => "\xbe", + 0x0000017d => "\xb4", + 0x0000017e => "\xb8", + 0x000020ac => "\xa4", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_15 - Conversion routines for ISO-8859-15 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-15. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + automatically generated from the charDB + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000020AC | EURO SIGN + A5 | 000000A5 | YEN SIGN + A6 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + A7 | 000000A7 | SECTION SIGN + A8 | 00000161 | LATIN SMALL LETTER S WITH CARON + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000AA | FEMININE ORDINAL INDICATOR + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 0000017E | LATIN SMALL LETTER Z WITH CARON + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000BA | MASCULINE ORDINAL INDICATOR + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 00000152 | LATIN CAPITAL LIGATURE OE + BD | 00000153 | LATIN SMALL LIGATURE OE + BE | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 000000D0 | LATIN CAPITAL LETTER ETH + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 000000DE | LATIN CAPITAL LETTER THORN + DF | 000000DF | LATIN SMALL LETTER SHARP S + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 000000F0 | LATIN SMALL LETTER ETH + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 000000FE | LATIN SMALL LETTER THORN + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_16.pm b/lib/Locale/RecodeData/ISO_8859_16.pm new file mode 100644 index 0000000..f977861 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_16.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-16. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_16; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0104, + 0x0105, + 0x0141, + 0x20ac, + 0x201e, + 0x0160, + 0x00a7, + 0x0161, + 0x00a9, + 0x0218, + 0x00ab, + 0x0179, + 0x00ad, + 0x017a, + 0x017b, + 0x00b0, + 0x00b1, + 0x010c, + 0x0142, + 0x017d, + 0x201d, + 0x00b6, + 0x00b7, + 0x017e, + 0x010d, + 0x0219, + 0x00bb, + 0x0152, + 0x0153, + 0x0178, + 0x017c, + 0x00c0, + 0x00c1, + 0x00c2, + 0x0102, + 0x00c4, + 0x0106, + 0x00c6, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0x0110, + 0x0143, + 0x00d2, + 0x00d3, + 0x00d4, + 0x0150, + 0x00d6, + 0x015a, + 0x0170, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x0118, + 0x021a, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0x0103, + 0x00e4, + 0x0107, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x0111, + 0x0144, + 0x00f2, + 0x00f3, + 0x00f4, + 0x0151, + 0x00f6, + 0x015b, + 0x0171, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x0119, + 0x021b, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc4\x84", + "\xc4\x85", + "\xc5\x81", + "\xe2\x82\xac", + "\xe2\x80\x9e", + "\xc5\xa0", + "\xc2\xa7", + "\xc5\xa1", + "\xc2\xa9", + "\xc8\x98", + "\xc2\xab", + "\xc5\xb9", + "\xc2\xad", + "\xc5\xba", + "\xc5\xbb", + "\xc2\xb0", + "\xc2\xb1", + "\xc4\x8c", + "\xc5\x82", + "\xc5\xbd", + "\xe2\x80\x9d", + "\xc2\xb6", + "\xc2\xb7", + "\xc5\xbe", + "\xc4\x8d", + "\xc8\x99", + "\xc2\xbb", + "\xc5\x92", + "\xc5\x93", + "\xc5\xb8", + "\xc5\xbc", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc4\x82", + "\xc3\x84", + "\xc4\x86", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc4\x90", + "\xc5\x83", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc5\x90", + "\xc3\x96", + "\xc5\x9a", + "\xc5\xb0", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc4\x98", + "\xc8\x9a", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc4\x83", + "\xc3\xa4", + "\xc4\x87", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc4\x91", + "\xc5\x84", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc5\x91", + "\xc3\xb6", + "\xc5\x9b", + "\xc5\xb1", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc4\x99", + "\xc8\x9b", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a7 => "\xa7", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ad => "\xad", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000bb => "\xbb", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c4 => "\xc4", + 0x000000c6 => "\xc6", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d6 => "\xd6", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e4 => "\xe4", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f6 => "\xf6", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000ff => "\xff", + 0x00000102 => "\xc3", + 0x00000103 => "\xe3", + 0x00000104 => "\xa1", + 0x00000105 => "\xa2", + 0x00000106 => "\xc5", + 0x00000107 => "\xe5", + 0x0000010c => "\xb2", + 0x0000010d => "\xb9", + 0x00000110 => "\xd0", + 0x00000111 => "\xf0", + 0x00000118 => "\xdd", + 0x00000119 => "\xfd", + 0x00000141 => "\xa3", + 0x00000142 => "\xb3", + 0x00000143 => "\xd1", + 0x00000144 => "\xf1", + 0x00000150 => "\xd5", + 0x00000151 => "\xf5", + 0x00000152 => "\xbc", + 0x00000153 => "\xbd", + 0x0000015a => "\xd7", + 0x0000015b => "\xf7", + 0x00000160 => "\xa6", + 0x00000161 => "\xa8", + 0x00000170 => "\xd8", + 0x00000171 => "\xf8", + 0x00000178 => "\xbe", + 0x00000179 => "\xac", + 0x0000017a => "\xae", + 0x0000017b => "\xaf", + 0x0000017c => "\xbf", + 0x0000017d => "\xb4", + 0x0000017e => "\xb8", + 0x00000218 => "\xaa", + 0x00000219 => "\xba", + 0x0000021a => "\xde", + 0x0000021b => "\xfe", + 0x0000201d => "\xb5", + 0x0000201e => "\xa5", + 0x000020ac => "\xa4", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_16 - Conversion routines for ISO-8859-16 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-16. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + automatically generated from the charDB + alias ISO-IR-226 + alias LATIN10 + alias L10 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + A2 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + A3 | 00000141 | LATIN CAPITAL LETTER L WITH STROKE + A4 | 000020AC | EURO SIGN + A5 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + A6 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + A7 | 000000A7 | SECTION SIGN + A8 | 00000161 | LATIN SMALL LETTER S WITH CARON + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00000218 | LATIN CAPITAL LETTER S WITH COMMA BELOW + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 00000179 | LATIN CAPITAL LETTER Z WITH ACUTE + AD | 000000AD | SOFT HYPHEN + AE | 0000017A | LATIN SMALL LETTER Z WITH ACUTE + AF | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + B3 | 00000142 | LATIN SMALL LETTER L WITH STROKE + B4 | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + B5 | 0000201D | RIGHT DOUBLE QUOTATION MARK + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 0000017E | LATIN SMALL LETTER Z WITH CARON + B9 | 0000010D | LATIN SMALL LETTER C WITH CARON + BA | 00000219 | LATIN SMALL LETTER S WITH COMMA BELOW + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 00000152 | LATIN CAPITAL LIGATURE OE + BD | 00000153 | LATIN SMALL LIGATURE OE + BE | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + BF | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 00000102 | LATIN CAPITAL LETTER A WITH BREVE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + D1 | 00000143 | LATIN CAPITAL LETTER N WITH ACUTE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 0000015A | LATIN CAPITAL LETTER S WITH ACUTE + D8 | 00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK + DE | 0000021A | LATIN CAPITAL LETTER T WITH COMMA BELOW + DF | 000000DF | LATIN SMALL LETTER SHARP S + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 00000103 | LATIN SMALL LETTER A WITH BREVE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 00000107 | LATIN SMALL LETTER C WITH ACUTE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 00000111 | LATIN SMALL LETTER D WITH STROKE + F1 | 00000144 | LATIN SMALL LETTER N WITH ACUTE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 0000015B | LATIN SMALL LETTER S WITH ACUTE + F8 | 00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 00000119 | LATIN SMALL LETTER E WITH OGONEK + FE | 0000021B | LATIN SMALL LETTER T WITH COMMA BELOW + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_2.pm b/lib/Locale/RecodeData/ISO_8859_2.pm new file mode 100644 index 0000000..ac28347 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_2.pm @@ -0,0 +1,1144 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-2. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_2; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0104, + 0x02d8, + 0x0141, + 0x00a4, + 0x013d, + 0x015a, + 0x00a7, + 0x00a8, + 0x0160, + 0x015e, + 0x0164, + 0x0179, + 0x00ad, + 0x017d, + 0x017b, + 0x00b0, + 0x0105, + 0x02db, + 0x0142, + 0x00b4, + 0x013e, + 0x015b, + 0x02c7, + 0x00b8, + 0x0161, + 0x015f, + 0x0165, + 0x017a, + 0x02dd, + 0x017e, + 0x017c, + 0x0154, + 0x00c1, + 0x00c2, + 0x0102, + 0x00c4, + 0x0139, + 0x0106, + 0x00c7, + 0x010c, + 0x00c9, + 0x0118, + 0x00cb, + 0x011a, + 0x00cd, + 0x00ce, + 0x010e, + 0x0110, + 0x0143, + 0x0147, + 0x00d3, + 0x00d4, + 0x0150, + 0x00d6, + 0x00d7, + 0x0158, + 0x016e, + 0x00da, + 0x0170, + 0x00dc, + 0x00dd, + 0x0162, + 0x00df, + 0x0155, + 0x00e1, + 0x00e2, + 0x0103, + 0x00e4, + 0x013a, + 0x0107, + 0x00e7, + 0x010d, + 0x00e9, + 0x0119, + 0x00eb, + 0x011b, + 0x00ed, + 0x00ee, + 0x010f, + 0x0111, + 0x0144, + 0x0148, + 0x00f3, + 0x00f4, + 0x0151, + 0x00f6, + 0x00f7, + 0x0159, + 0x016f, + 0x00fa, + 0x0171, + 0x00fc, + 0x00fd, + 0x0163, + 0x02d9, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc4\x84", + "\xcb\x98", + "\xc5\x81", + "\xc2\xa4", + "\xc4\xbd", + "\xc5\x9a", + "\xc2\xa7", + "\xc2\xa8", + "\xc5\xa0", + "\xc5\x9e", + "\xc5\xa4", + "\xc5\xb9", + "\xc2\xad", + "\xc5\xbd", + "\xc5\xbb", + "\xc2\xb0", + "\xc4\x85", + "\xcb\x9b", + "\xc5\x82", + "\xc2\xb4", + "\xc4\xbe", + "\xc5\x9b", + "\xcb\x87", + "\xc2\xb8", + "\xc5\xa1", + "\xc5\x9f", + "\xc5\xa5", + "\xc5\xba", + "\xcb\x9d", + "\xc5\xbe", + "\xc5\xbc", + "\xc5\x94", + "\xc3\x81", + "\xc3\x82", + "\xc4\x82", + "\xc3\x84", + "\xc4\xb9", + "\xc4\x86", + "\xc3\x87", + "\xc4\x8c", + "\xc3\x89", + "\xc4\x98", + "\xc3\x8b", + "\xc4\x9a", + "\xc3\x8d", + "\xc3\x8e", + "\xc4\x8e", + "\xc4\x90", + "\xc5\x83", + "\xc5\x87", + "\xc3\x93", + "\xc3\x94", + "\xc5\x90", + "\xc3\x96", + "\xc3\x97", + "\xc5\x98", + "\xc5\xae", + "\xc3\x9a", + "\xc5\xb0", + "\xc3\x9c", + "\xc3\x9d", + "\xc5\xa2", + "\xc3\x9f", + "\xc5\x95", + "\xc3\xa1", + "\xc3\xa2", + "\xc4\x83", + "\xc3\xa4", + "\xc4\xba", + "\xc4\x87", + "\xc3\xa7", + "\xc4\x8d", + "\xc3\xa9", + "\xc4\x99", + "\xc3\xab", + "\xc4\x9b", + "\xc3\xad", + "\xc3\xae", + "\xc4\x8f", + "\xc4\x91", + "\xc5\x84", + "\xc5\x88", + "\xc3\xb3", + "\xc3\xb4", + "\xc5\x91", + "\xc3\xb6", + "\xc3\xb7", + "\xc5\x99", + "\xc5\xaf", + "\xc3\xba", + "\xc5\xb1", + "\xc3\xbc", + "\xc3\xbd", + "\xc5\xa3", + "\xcb\x99", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a4 => "\xa4", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000ad => "\xad", + 0x000000b0 => "\xb0", + 0x000000b4 => "\xb4", + 0x000000b8 => "\xb8", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c4 => "\xc4", + 0x000000c7 => "\xc7", + 0x000000c9 => "\xc9", + 0x000000cb => "\xcb", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000da => "\xda", + 0x000000dc => "\xdc", + 0x000000dd => "\xdd", + 0x000000df => "\xdf", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e4 => "\xe4", + 0x000000e7 => "\xe7", + 0x000000e9 => "\xe9", + 0x000000eb => "\xeb", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000fa => "\xfa", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x00000102 => "\xc3", + 0x00000103 => "\xe3", + 0x00000104 => "\xa1", + 0x00000105 => "\xb1", + 0x00000106 => "\xc6", + 0x00000107 => "\xe6", + 0x0000010c => "\xc8", + 0x0000010d => "\xe8", + 0x0000010e => "\xcf", + 0x0000010f => "\xef", + 0x00000110 => "\xd0", + 0x00000111 => "\xf0", + 0x00000118 => "\xca", + 0x00000119 => "\xea", + 0x0000011a => "\xcc", + 0x0000011b => "\xec", + 0x00000139 => "\xc5", + 0x0000013a => "\xe5", + 0x0000013d => "\xa5", + 0x0000013e => "\xb5", + 0x00000141 => "\xa3", + 0x00000142 => "\xb3", + 0x00000143 => "\xd1", + 0x00000144 => "\xf1", + 0x00000147 => "\xd2", + 0x00000148 => "\xf2", + 0x00000150 => "\xd5", + 0x00000151 => "\xf5", + 0x00000154 => "\xc0", + 0x00000155 => "\xe0", + 0x00000158 => "\xd8", + 0x00000159 => "\xf8", + 0x0000015a => "\xa6", + 0x0000015b => "\xb6", + 0x0000015e => "\xaa", + 0x0000015f => "\xba", + 0x00000160 => "\xa9", + 0x00000161 => "\xb9", + 0x00000162 => "\xde", + 0x00000163 => "\xfe", + 0x00000164 => "\xab", + 0x00000165 => "\xbb", + 0x0000016e => "\xd9", + 0x0000016f => "\xf9", + 0x00000170 => "\xdb", + 0x00000171 => "\xfb", + 0x00000179 => "\xac", + 0x0000017a => "\xbc", + 0x0000017b => "\xaf", + 0x0000017c => "\xbf", + 0x0000017d => "\xae", + 0x0000017e => "\xbe", + 0x000002c7 => "\xb7", + 0x000002d8 => "\xa2", + 0x000002d9 => "\xff", + 0x000002db => "\xb2", + 0x000002dd => "\xbd", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_2 - Conversion routines for ISO-8859-2 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-2. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-101 + alias ISO_8859-2:1987 + alias ISO_8859-2 + alias LATIN2 + alias L2 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + A2 | 000002D8 | BREVE + A3 | 00000141 | LATIN CAPITAL LETTER L WITH STROKE + A4 | 000000A4 | CURRENCY SIGN + A5 | 0000013D | LATIN CAPITAL LETTER L WITH CARON + A6 | 0000015A | LATIN CAPITAL LETTER S WITH ACUTE + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + AA | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + AB | 00000164 | LATIN CAPITAL LETTER T WITH CARON + AC | 00000179 | LATIN CAPITAL LETTER Z WITH ACUTE + AD | 000000AD | SOFT HYPHEN + AE | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + AF | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + B0 | 000000B0 | DEGREE SIGN + B1 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + B2 | 000002DB | OGONEK + B3 | 00000142 | LATIN SMALL LETTER L WITH STROKE + B4 | 000000B4 | ACUTE ACCENT + B5 | 0000013E | LATIN SMALL LETTER L WITH CARON + B6 | 0000015B | LATIN SMALL LETTER S WITH ACUTE + B7 | 000002C7 | CARON (Mandarin Chinese third tone) + B8 | 000000B8 | CEDILLA + B9 | 00000161 | LATIN SMALL LETTER S WITH CARON + BA | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + BB | 00000165 | LATIN SMALL LETTER T WITH CARON + BC | 0000017A | LATIN SMALL LETTER Z WITH ACUTE + BD | 000002DD | DOUBLE ACUTE ACCENT + BE | 0000017E | LATIN SMALL LETTER Z WITH CARON + BF | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + C0 | 00000154 | LATIN CAPITAL LETTER R WITH ACUTE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 00000102 | LATIN CAPITAL LETTER A WITH BREVE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 00000139 | LATIN CAPITAL LETTER L WITH ACUTE + C6 | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 0000011A | LATIN CAPITAL LETTER E WITH CARON + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 0000010E | LATIN CAPITAL LETTER D WITH CARON + D0 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + D1 | 00000143 | LATIN CAPITAL LETTER N WITH ACUTE + D2 | 00000147 | LATIN CAPITAL LETTER N WITH CARON + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 00000158 | LATIN CAPITAL LETTER R WITH CARON + D9 | 0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 00000162 | LATIN CAPITAL LETTER T WITH CEDILLA + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 00000155 | LATIN SMALL LETTER R WITH ACUTE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 00000103 | LATIN SMALL LETTER A WITH BREVE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 0000013A | LATIN SMALL LETTER L WITH ACUTE + E6 | 00000107 | LATIN SMALL LETTER C WITH ACUTE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 0000010D | LATIN SMALL LETTER C WITH CARON + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 00000119 | LATIN SMALL LETTER E WITH OGONEK + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 0000011B | LATIN SMALL LETTER E WITH CARON + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 0000010F | LATIN SMALL LETTER D WITH CARON + F0 | 00000111 | LATIN SMALL LETTER D WITH STROKE + F1 | 00000144 | LATIN SMALL LETTER N WITH ACUTE + F2 | 00000148 | LATIN SMALL LETTER N WITH CARON + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 00000159 | LATIN SMALL LETTER R WITH CARON + F9 | 0000016F | LATIN SMALL LETTER U WITH RING ABOVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 00000163 | LATIN SMALL LETTER T WITH CEDILLA + FF | 000002D9 | DOT ABOVE (Mandarin Chinese light tone) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_3.pm b/lib/Locale/RecodeData/ISO_8859_3.pm new file mode 100644 index 0000000..96930eb --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_3.pm @@ -0,0 +1,1130 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-3. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_3; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0126, + 0x02d8, + 0x00a3, + 0x00a4, + 0xfffd, + 0x0124, + 0x00a7, + 0x00a8, + 0x0130, + 0x015e, + 0x011e, + 0x0134, + 0x00ad, + 0xfffd, + 0x017b, + 0x00b0, + 0x0127, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x0125, + 0x00b7, + 0x00b8, + 0x0131, + 0x015f, + 0x011f, + 0x0135, + 0x00bd, + 0xfffd, + 0x017c, + 0x00c0, + 0x00c1, + 0x00c2, + 0xfffd, + 0x00c4, + 0x010a, + 0x0108, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0xfffd, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x0120, + 0x00d6, + 0x00d7, + 0x011c, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x016c, + 0x015c, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0xfffd, + 0x00e4, + 0x010b, + 0x0109, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0xfffd, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x0121, + 0x00f6, + 0x00f7, + 0x011d, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x016d, + 0x015d, + 0x02d9, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc4\xa6", + "\xcb\x98", + "\xc2\xa3", + "\xc2\xa4", + "\xef\xbf\xbd", + "\xc4\xa4", + "\xc2\xa7", + "\xc2\xa8", + "\xc4\xb0", + "\xc5\x9e", + "\xc4\x9e", + "\xc4\xb4", + "\xc2\xad", + "\xef\xbf\xbd", + "\xc5\xbb", + "\xc2\xb0", + "\xc4\xa7", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc4\xa5", + "\xc2\xb7", + "\xc2\xb8", + "\xc4\xb1", + "\xc5\x9f", + "\xc4\x9f", + "\xc4\xb5", + "\xc2\xbd", + "\xef\xbf\xbd", + "\xc5\xbc", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xef\xbf\xbd", + "\xc3\x84", + "\xc4\x8a", + "\xc4\x88", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xef\xbf\xbd", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc4\xa0", + "\xc3\x96", + "\xc3\x97", + "\xc4\x9c", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc5\xac", + "\xc5\x9c", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xef\xbf\xbd", + "\xc3\xa4", + "\xc4\x8b", + "\xc4\x89", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xef\xbf\xbd", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc4\xa1", + "\xc3\xb6", + "\xc3\xb7", + "\xc4\x9d", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc5\xad", + "\xc5\x9d", + "\xcb\x99", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000ad => "\xad", + 0x000000b0 => "\xb0", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000bd => "\xbd", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c4 => "\xc4", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d1 => "\xd1", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e4 => "\xe4", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x00000108 => "\xc6", + 0x00000109 => "\xe6", + 0x0000010a => "\xc5", + 0x0000010b => "\xe5", + 0x0000011c => "\xd8", + 0x0000011d => "\xf8", + 0x0000011e => "\xab", + 0x0000011f => "\xbb", + 0x00000120 => "\xd5", + 0x00000121 => "\xf5", + 0x00000124 => "\xa6", + 0x00000125 => "\xb6", + 0x00000126 => "\xa1", + 0x00000127 => "\xb1", + 0x00000130 => "\xa9", + 0x00000131 => "\xb9", + 0x00000134 => "\xac", + 0x00000135 => "\xbc", + 0x0000015c => "\xde", + 0x0000015d => "\xfe", + 0x0000015e => "\xaa", + 0x0000015f => "\xba", + 0x0000016c => "\xdd", + 0x0000016d => "\xfd", + 0x0000017b => "\xaf", + 0x0000017c => "\xbf", + 0x000002d8 => "\xa2", + 0x000002d9 => "\xff", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_3 - Conversion routines for ISO-8859-3 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-3. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-109 + alias ISO_8859-3:1988 + alias ISO_8859-3 + alias LATIN3 + alias L3 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000126 | LATIN CAPITAL LETTER H WITH STROKE + A2 | 000002D8 | BREVE + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A6 | 00000124 | LATIN CAPITAL LETTER H WITH CIRCUMFLEX + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE + AA | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + AB | 0000011E | LATIN CAPITAL LETTER G WITH BREVE + AC | 00000134 | LATIN CAPITAL LETTER J WITH CIRCUMFLEX + AD | 000000AD | SOFT HYPHEN + AF | 0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE + B0 | 000000B0 | DEGREE SIGN + B1 | 00000127 | LATIN SMALL LETTER H WITH STROKE + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 00000125 | LATIN SMALL LETTER H WITH CIRCUMFLEX + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 00000131 | LATIN SMALL LETTER DOTLESS I + BA | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + BB | 0000011F | LATIN SMALL LETTER G WITH BREVE + BC | 00000135 | LATIN SMALL LETTER J WITH CIRCUMFLEX + BD | 000000BD | VULGAR FRACTION ONE HALF + BF | 0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 0000010A | LATIN CAPITAL LETTER C WITH DOT ABOVE + C6 | 00000108 | LATIN CAPITAL LETTER C WITH CIRCUMFLEX + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 00000120 | LATIN CAPITAL LETTER G WITH DOT ABOVE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 0000011C | LATIN CAPITAL LETTER G WITH CIRCUMFLEX + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 0000016C | LATIN CAPITAL LETTER U WITH BREVE + DE | 0000015C | LATIN CAPITAL LETTER S WITH CIRCUMFLEX + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 0000010B | LATIN SMALL LETTER C WITH DOT ABOVE + E6 | 00000109 | LATIN SMALL LETTER C WITH CIRCUMFLEX + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 00000121 | LATIN SMALL LETTER G WITH DOT ABOVE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 0000011D | LATIN SMALL LETTER G WITH CIRCUMFLEX + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 0000016D | LATIN SMALL LETTER U WITH BREVE + FE | 0000015D | LATIN SMALL LETTER S WITH CIRCUMFLEX + FF | 000002D9 | DOT ABOVE (Mandarin Chinese light tone) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_4.pm b/lib/Locale/RecodeData/ISO_8859_4.pm new file mode 100644 index 0000000..e97c1c9 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_4.pm @@ -0,0 +1,1144 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-4. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_4; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0104, + 0x0138, + 0x0156, + 0x00a4, + 0x0128, + 0x013b, + 0x00a7, + 0x00a8, + 0x0160, + 0x0112, + 0x0122, + 0x0166, + 0x00ad, + 0x017d, + 0x00af, + 0x00b0, + 0x0105, + 0x02db, + 0x0157, + 0x00b4, + 0x0129, + 0x013c, + 0x02c7, + 0x00b8, + 0x0161, + 0x0113, + 0x0123, + 0x0167, + 0x014a, + 0x017e, + 0x014b, + 0x0100, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x012e, + 0x010c, + 0x00c9, + 0x0118, + 0x00cb, + 0x0116, + 0x00cd, + 0x00ce, + 0x012a, + 0x0110, + 0x0145, + 0x014c, + 0x0136, + 0x00d4, + 0x00d5, + 0x00d6, + 0x00d7, + 0x00d8, + 0x0172, + 0x00da, + 0x00db, + 0x00dc, + 0x0168, + 0x016a, + 0x00df, + 0x0101, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x012f, + 0x010d, + 0x00e9, + 0x0119, + 0x00eb, + 0x0117, + 0x00ed, + 0x00ee, + 0x012b, + 0x0111, + 0x0146, + 0x014d, + 0x0137, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00f7, + 0x00f8, + 0x0173, + 0x00fa, + 0x00fb, + 0x00fc, + 0x0169, + 0x016b, + 0x02d9, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc4\x84", + "\xc4\xb8", + "\xc5\x96", + "\xc2\xa4", + "\xc4\xa8", + "\xc4\xbb", + "\xc2\xa7", + "\xc2\xa8", + "\xc5\xa0", + "\xc4\x92", + "\xc4\xa2", + "\xc5\xa6", + "\xc2\xad", + "\xc5\xbd", + "\xc2\xaf", + "\xc2\xb0", + "\xc4\x85", + "\xcb\x9b", + "\xc5\x97", + "\xc2\xb4", + "\xc4\xa9", + "\xc4\xbc", + "\xcb\x87", + "\xc2\xb8", + "\xc5\xa1", + "\xc4\x93", + "\xc4\xa3", + "\xc5\xa7", + "\xc5\x8a", + "\xc5\xbe", + "\xc5\x8b", + "\xc4\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc4\xae", + "\xc4\x8c", + "\xc3\x89", + "\xc4\x98", + "\xc3\x8b", + "\xc4\x96", + "\xc3\x8d", + "\xc3\x8e", + "\xc4\xaa", + "\xc4\x90", + "\xc5\x85", + "\xc5\x8c", + "\xc4\xb6", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc3\x98", + "\xc5\xb2", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc5\xa8", + "\xc5\xaa", + "\xc3\x9f", + "\xc4\x81", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc4\xaf", + "\xc4\x8d", + "\xc3\xa9", + "\xc4\x99", + "\xc3\xab", + "\xc4\x97", + "\xc3\xad", + "\xc3\xae", + "\xc4\xab", + "\xc4\x91", + "\xc5\x86", + "\xc5\x8d", + "\xc4\xb7", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc5\xb3", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc5\xa9", + "\xc5\xab", + "\xcb\x99", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a4 => "\xa4", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000ad => "\xad", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b4 => "\xb4", + 0x000000b8 => "\xb8", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c9 => "\xc9", + 0x000000cb => "\xcb", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d8 => "\xd8", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000df => "\xdf", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e9 => "\xe9", + 0x000000eb => "\xeb", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xf8", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x00000100 => "\xc0", + 0x00000101 => "\xe0", + 0x00000104 => "\xa1", + 0x00000105 => "\xb1", + 0x0000010c => "\xc8", + 0x0000010d => "\xe8", + 0x00000110 => "\xd0", + 0x00000111 => "\xf0", + 0x00000112 => "\xaa", + 0x00000113 => "\xba", + 0x00000116 => "\xcc", + 0x00000117 => "\xec", + 0x00000118 => "\xca", + 0x00000119 => "\xea", + 0x00000122 => "\xab", + 0x00000123 => "\xbb", + 0x00000128 => "\xa5", + 0x00000129 => "\xb5", + 0x0000012a => "\xcf", + 0x0000012b => "\xef", + 0x0000012e => "\xc7", + 0x0000012f => "\xe7", + 0x00000136 => "\xd3", + 0x00000137 => "\xf3", + 0x00000138 => "\xa2", + 0x0000013b => "\xa6", + 0x0000013c => "\xb6", + 0x00000145 => "\xd1", + 0x00000146 => "\xf1", + 0x0000014a => "\xbd", + 0x0000014b => "\xbf", + 0x0000014c => "\xd2", + 0x0000014d => "\xf2", + 0x00000156 => "\xa3", + 0x00000157 => "\xb3", + 0x00000160 => "\xa9", + 0x00000161 => "\xb9", + 0x00000166 => "\xac", + 0x00000167 => "\xbc", + 0x00000168 => "\xdd", + 0x00000169 => "\xfd", + 0x0000016a => "\xde", + 0x0000016b => "\xfe", + 0x00000172 => "\xd9", + 0x00000173 => "\xf9", + 0x0000017d => "\xae", + 0x0000017e => "\xbe", + 0x000002c7 => "\xb7", + 0x000002d9 => "\xff", + 0x000002db => "\xb2", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_4 - Conversion routines for ISO-8859-4 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-4. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-110 + alias ISO_8859-4:1988 + alias ISO_8859-4 + alias LATIN4 + alias L4 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000104 | LATIN CAPITAL LETTER A WITH OGONEK + A2 | 00000138 | LATIN SMALL LETTER KRA (Greenlandic) + A3 | 00000156 | LATIN CAPITAL LETTER R WITH CEDILLA + A4 | 000000A4 | CURRENCY SIGN + A5 | 00000128 | LATIN CAPITAL LETTER I WITH TILDE + A6 | 0000013B | LATIN CAPITAL LETTER L WITH CEDILLA + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + AA | 00000112 | LATIN CAPITAL LETTER E WITH MACRON + AB | 00000122 | LATIN CAPITAL LETTER G WITH CEDILLA + AC | 00000166 | LATIN CAPITAL LETTER T WITH STROKE + AD | 000000AD | SOFT HYPHEN + AE | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 00000105 | LATIN SMALL LETTER A WITH OGONEK + B2 | 000002DB | OGONEK + B3 | 00000157 | LATIN SMALL LETTER R WITH CEDILLA + B4 | 000000B4 | ACUTE ACCENT + B5 | 00000129 | LATIN SMALL LETTER I WITH TILDE + B6 | 0000013C | LATIN SMALL LETTER L WITH CEDILLA + B7 | 000002C7 | CARON (Mandarin Chinese third tone) + B8 | 000000B8 | CEDILLA + B9 | 00000161 | LATIN SMALL LETTER S WITH CARON + BA | 00000113 | LATIN SMALL LETTER E WITH MACRON + BB | 00000123 | LATIN SMALL LETTER G WITH CEDILLA + BC | 00000167 | LATIN SMALL LETTER T WITH STROKE + BD | 0000014A | LATIN CAPITAL LETTER ENG (Sami) + BE | 0000017E | LATIN SMALL LETTER Z WITH CARON + BF | 0000014B | LATIN SMALL LETTER ENG (Sami) + C0 | 00000100 | LATIN CAPITAL LETTER A WITH MACRON + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 0000012E | LATIN CAPITAL LETTER I WITH OGONEK + C8 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 00000118 | LATIN CAPITAL LETTER E WITH OGONEK + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 00000116 | LATIN CAPITAL LETTER E WITH DOT ABOVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 0000012A | LATIN CAPITAL LETTER I WITH MACRON + D0 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + D1 | 00000145 | LATIN CAPITAL LETTER N WITH CEDILLA + D2 | 0000014C | LATIN CAPITAL LETTER O WITH MACRON + D3 | 00000136 | LATIN CAPITAL LETTER K WITH CEDILLA + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 00000172 | LATIN CAPITAL LETTER U WITH OGONEK + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 00000168 | LATIN CAPITAL LETTER U WITH TILDE + DE | 0000016A | LATIN CAPITAL LETTER U WITH MACRON + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 00000101 | LATIN SMALL LETTER A WITH MACRON + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 0000012F | LATIN SMALL LETTER I WITH OGONEK + E8 | 0000010D | LATIN SMALL LETTER C WITH CARON + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 00000119 | LATIN SMALL LETTER E WITH OGONEK + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 00000117 | LATIN SMALL LETTER E WITH DOT ABOVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 0000012B | LATIN SMALL LETTER I WITH MACRON + F0 | 00000111 | LATIN SMALL LETTER D WITH STROKE + F1 | 00000146 | LATIN SMALL LETTER N WITH CEDILLA + F2 | 0000014D | LATIN SMALL LETTER O WITH MACRON + F3 | 00000137 | LATIN SMALL LETTER K WITH CEDILLA + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 00000173 | LATIN SMALL LETTER U WITH OGONEK + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 00000169 | LATIN SMALL LETTER U WITH TILDE + FE | 0000016B | LATIN SMALL LETTER U WITH MACRON + FF | 000002D9 | DOT ABOVE (Mandarin Chinese light tone) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_5.pm b/lib/Locale/RecodeData/ISO_8859_5.pm new file mode 100644 index 0000000..f7ffed2 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_5.pm @@ -0,0 +1,1143 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-5. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_5; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x0401, + 0x0402, + 0x0403, + 0x0404, + 0x0405, + 0x0406, + 0x0407, + 0x0408, + 0x0409, + 0x040a, + 0x040b, + 0x040c, + 0x00ad, + 0x040e, + 0x040f, + 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, + 0x2116, + 0x0451, + 0x0452, + 0x0453, + 0x0454, + 0x0455, + 0x0456, + 0x0457, + 0x0458, + 0x0459, + 0x045a, + 0x045b, + 0x045c, + 0x00a7, + 0x045e, + 0x045f, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xd0\x81", + "\xd0\x82", + "\xd0\x83", + "\xd0\x84", + "\xd0\x85", + "\xd0\x86", + "\xd0\x87", + "\xd0\x88", + "\xd0\x89", + "\xd0\x8a", + "\xd0\x8b", + "\xd0\x8c", + "\xc2\xad", + "\xd0\x8e", + "\xd0\x8f", + "\xd0\x90", + "\xd0\x91", + "\xd0\x92", + "\xd0\x93", + "\xd0\x94", + "\xd0\x95", + "\xd0\x96", + "\xd0\x97", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\xa4", + "\xd0\xa5", + "\xd0\xa6", + "\xd0\xa7", + "\xd0\xa8", + "\xd0\xa9", + "\xd0\xaa", + "\xd0\xab", + "\xd0\xac", + "\xd0\xad", + "\xd0\xae", + "\xd0\xaf", + "\xd0\xb0", + "\xd0\xb1", + "\xd0\xb2", + "\xd0\xb3", + "\xd0\xb4", + "\xd0\xb5", + "\xd0\xb6", + "\xd0\xb7", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd1\x84", + "\xd1\x85", + "\xd1\x86", + "\xd1\x87", + "\xd1\x88", + "\xd1\x89", + "\xd1\x8a", + "\xd1\x8b", + "\xd1\x8c", + "\xd1\x8d", + "\xd1\x8e", + "\xd1\x8f", + "\xe2\x84\x96", + "\xd1\x91", + "\xd1\x92", + "\xd1\x93", + "\xd1\x94", + "\xd1\x95", + "\xd1\x96", + "\xd1\x97", + "\xd1\x98", + "\xd1\x99", + "\xd1\x9a", + "\xd1\x9b", + "\xd1\x9c", + "\xc2\xa7", + "\xd1\x9e", + "\xd1\x9f", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a7 => "\xfd", + 0x000000ad => "\xad", + 0x00000401 => "\xa1", + 0x00000402 => "\xa2", + 0x00000403 => "\xa3", + 0x00000404 => "\xa4", + 0x00000405 => "\xa5", + 0x00000406 => "\xa6", + 0x00000407 => "\xa7", + 0x00000408 => "\xa8", + 0x00000409 => "\xa9", + 0x0000040a => "\xaa", + 0x0000040b => "\xab", + 0x0000040c => "\xac", + 0x0000040e => "\xae", + 0x0000040f => "\xaf", + 0x00000410 => "\xb0", + 0x00000411 => "\xb1", + 0x00000412 => "\xb2", + 0x00000413 => "\xb3", + 0x00000414 => "\xb4", + 0x00000415 => "\xb5", + 0x00000416 => "\xb6", + 0x00000417 => "\xb7", + 0x00000418 => "\xb8", + 0x00000419 => "\xb9", + 0x0000041a => "\xba", + 0x0000041b => "\xbb", + 0x0000041c => "\xbc", + 0x0000041d => "\xbd", + 0x0000041e => "\xbe", + 0x0000041f => "\xbf", + 0x00000420 => "\xc0", + 0x00000421 => "\xc1", + 0x00000422 => "\xc2", + 0x00000423 => "\xc3", + 0x00000424 => "\xc4", + 0x00000425 => "\xc5", + 0x00000426 => "\xc6", + 0x00000427 => "\xc7", + 0x00000428 => "\xc8", + 0x00000429 => "\xc9", + 0x0000042a => "\xca", + 0x0000042b => "\xcb", + 0x0000042c => "\xcc", + 0x0000042d => "\xcd", + 0x0000042e => "\xce", + 0x0000042f => "\xcf", + 0x00000430 => "\xd0", + 0x00000431 => "\xd1", + 0x00000432 => "\xd2", + 0x00000433 => "\xd3", + 0x00000434 => "\xd4", + 0x00000435 => "\xd5", + 0x00000436 => "\xd6", + 0x00000437 => "\xd7", + 0x00000438 => "\xd8", + 0x00000439 => "\xd9", + 0x0000043a => "\xda", + 0x0000043b => "\xdb", + 0x0000043c => "\xdc", + 0x0000043d => "\xdd", + 0x0000043e => "\xde", + 0x0000043f => "\xdf", + 0x00000440 => "\xe0", + 0x00000441 => "\xe1", + 0x00000442 => "\xe2", + 0x00000443 => "\xe3", + 0x00000444 => "\xe4", + 0x00000445 => "\xe5", + 0x00000446 => "\xe6", + 0x00000447 => "\xe7", + 0x00000448 => "\xe8", + 0x00000449 => "\xe9", + 0x0000044a => "\xea", + 0x0000044b => "\xeb", + 0x0000044c => "\xec", + 0x0000044d => "\xed", + 0x0000044e => "\xee", + 0x0000044f => "\xef", + 0x00000451 => "\xf1", + 0x00000452 => "\xf2", + 0x00000453 => "\xf3", + 0x00000454 => "\xf4", + 0x00000455 => "\xf5", + 0x00000456 => "\xf6", + 0x00000457 => "\xf7", + 0x00000458 => "\xf8", + 0x00000459 => "\xf9", + 0x0000045a => "\xfa", + 0x0000045b => "\xfb", + 0x0000045c => "\xfc", + 0x0000045e => "\xfe", + 0x0000045f => "\xff", + 0x00002116 => "\xf0", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_5 - Conversion routines for ISO-8859-5 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-5. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-144 + alias ISO_8859-5:1988 + alias ISO_8859-5 + alias CYRILLIC + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000401 | CYRILLIC CAPITAL LETTER IO + A2 | 00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian) + A3 | 00000403 | CYRILLIC CAPITAL LETTER GJE + A4 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + A5 | 00000405 | CYRILLIC CAPITAL LETTER DZE + A6 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + A7 | 00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian) + A8 | 00000408 | CYRILLIC CAPITAL LETTER JE + A9 | 00000409 | CYRILLIC CAPITAL LETTER LJE + AA | 0000040A | CYRILLIC CAPITAL LETTER NJE + AB | 0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) + AC | 0000040C | CYRILLIC CAPITAL LETTER KJE + AD | 000000AD | SOFT HYPHEN + AE | 0000040E | CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) + AF | 0000040F | CYRILLIC CAPITAL LETTER DZHE + B0 | 00000410 | CYRILLIC CAPITAL LETTER A + B1 | 00000411 | CYRILLIC CAPITAL LETTER BE + B2 | 00000412 | CYRILLIC CAPITAL LETTER VE + B3 | 00000413 | CYRILLIC CAPITAL LETTER GHE + B4 | 00000414 | CYRILLIC CAPITAL LETTER DE + B5 | 00000415 | CYRILLIC CAPITAL LETTER IE + B6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + B7 | 00000417 | CYRILLIC CAPITAL LETTER ZE + B8 | 00000418 | CYRILLIC CAPITAL LETTER I + B9 | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + BA | 0000041A | CYRILLIC CAPITAL LETTER KA + BB | 0000041B | CYRILLIC CAPITAL LETTER EL + BC | 0000041C | CYRILLIC CAPITAL LETTER EM + BD | 0000041D | CYRILLIC CAPITAL LETTER EN + BE | 0000041E | CYRILLIC CAPITAL LETTER O + BF | 0000041F | CYRILLIC CAPITAL LETTER PE + C0 | 00000420 | CYRILLIC CAPITAL LETTER ER + C1 | 00000421 | CYRILLIC CAPITAL LETTER ES + C2 | 00000422 | CYRILLIC CAPITAL LETTER TE + C3 | 00000423 | CYRILLIC CAPITAL LETTER U + C4 | 00000424 | CYRILLIC CAPITAL LETTER EF + C5 | 00000425 | CYRILLIC CAPITAL LETTER HA + C6 | 00000426 | CYRILLIC CAPITAL LETTER TSE + C7 | 00000427 | CYRILLIC CAPITAL LETTER CHE + C8 | 00000428 | CYRILLIC CAPITAL LETTER SHA + C9 | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + CA | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + CB | 0000042B | CYRILLIC CAPITAL LETTER YERU + CC | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + CD | 0000042D | CYRILLIC CAPITAL LETTER E + CE | 0000042E | CYRILLIC CAPITAL LETTER YU + CF | 0000042F | CYRILLIC CAPITAL LETTER YA + D0 | 00000430 | CYRILLIC SMALL LETTER A + D1 | 00000431 | CYRILLIC SMALL LETTER BE + D2 | 00000432 | CYRILLIC SMALL LETTER VE + D3 | 00000433 | CYRILLIC SMALL LETTER GHE + D4 | 00000434 | CYRILLIC SMALL LETTER DE + D5 | 00000435 | CYRILLIC SMALL LETTER IE + D6 | 00000436 | CYRILLIC SMALL LETTER ZHE + D7 | 00000437 | CYRILLIC SMALL LETTER ZE + D8 | 00000438 | CYRILLIC SMALL LETTER I + D9 | 00000439 | CYRILLIC SMALL LETTER SHORT I + DA | 0000043A | CYRILLIC SMALL LETTER KA + DB | 0000043B | CYRILLIC SMALL LETTER EL + DC | 0000043C | CYRILLIC SMALL LETTER EM + DD | 0000043D | CYRILLIC SMALL LETTER EN + DE | 0000043E | CYRILLIC SMALL LETTER O + DF | 0000043F | CYRILLIC SMALL LETTER PE + E0 | 00000440 | CYRILLIC SMALL LETTER ER + E1 | 00000441 | CYRILLIC SMALL LETTER ES + E2 | 00000442 | CYRILLIC SMALL LETTER TE + E3 | 00000443 | CYRILLIC SMALL LETTER U + E4 | 00000444 | CYRILLIC SMALL LETTER EF + E5 | 00000445 | CYRILLIC SMALL LETTER HA + E6 | 00000446 | CYRILLIC SMALL LETTER TSE + E7 | 00000447 | CYRILLIC SMALL LETTER CHE + E8 | 00000448 | CYRILLIC SMALL LETTER SHA + E9 | 00000449 | CYRILLIC SMALL LETTER SHCHA + EA | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + EB | 0000044B | CYRILLIC SMALL LETTER YERU + EC | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + ED | 0000044D | CYRILLIC SMALL LETTER E + EE | 0000044E | CYRILLIC SMALL LETTER YU + EF | 0000044F | CYRILLIC SMALL LETTER YA + F0 | 00002116 | NUMERO SIGN + F1 | 00000451 | CYRILLIC SMALL LETTER IO + F2 | 00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian) + F3 | 00000453 | CYRILLIC SMALL LETTER GJE + F4 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + F5 | 00000455 | CYRILLIC SMALL LETTER DZE + F6 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + F7 | 00000457 | CYRILLIC SMALL LETTER YI (Ukrainian) + F8 | 00000458 | CYRILLIC SMALL LETTER JE + F9 | 00000459 | CYRILLIC SMALL LETTER LJE + FA | 0000045A | CYRILLIC SMALL LETTER NJE + FB | 0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian) + FC | 0000045C | CYRILLIC SMALL LETTER KJE + FD | 000000A7 | SECTION SIGN + FE | 0000045E | CYRILLIC SMALL LETTER SHORT U (Byelorussian) + FF | 0000045F | CYRILLIC SMALL LETTER DZHE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_6.pm b/lib/Locale/RecodeData/ISO_8859_6.pm new file mode 100644 index 0000000..9738c17 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_6.pm @@ -0,0 +1,1055 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-6. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_6; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00a4, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x060c, + 0x00ad, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x061b, + 0xfffd, + 0xfffd, + 0xfffd, + 0x061f, + 0xfffd, + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0640, + 0x0641, + 0x0642, + 0x0643, + 0x0644, + 0x0645, + 0x0646, + 0x0647, + 0x0648, + 0x0649, + 0x064a, + 0x064b, + 0x064c, + 0x064d, + 0x064e, + 0x064f, + 0x0650, + 0x0651, + 0x0652, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa4", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\x8c", + "\xc2\xad", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\x9b", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\x9f", + "\xef\xbf\xbd", + "\xd8\xa1", + "\xd8\xa2", + "\xd8\xa3", + "\xd8\xa4", + "\xd8\xa5", + "\xd8\xa6", + "\xd8\xa7", + "\xd8\xa8", + "\xd8\xa9", + "\xd8\xaa", + "\xd8\xab", + "\xd8\xac", + "\xd8\xad", + "\xd8\xae", + "\xd8\xaf", + "\xd8\xb0", + "\xd8\xb1", + "\xd8\xb2", + "\xd8\xb3", + "\xd8\xb4", + "\xd8\xb5", + "\xd8\xb6", + "\xd8\xb7", + "\xd8\xb8", + "\xd8\xb9", + "\xd8\xba", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd9\x80", + "\xd9\x81", + "\xd9\x82", + "\xd9\x83", + "\xd9\x84", + "\xd9\x85", + "\xd9\x86", + "\xd9\x87", + "\xd9\x88", + "\xd9\x89", + "\xd9\x8a", + "\xd9\x8b", + "\xd9\x8c", + "\xd9\x8d", + "\xd9\x8e", + "\xd9\x8f", + "\xd9\x90", + "\xd9\x91", + "\xd9\x92", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a4 => "\xa4", + 0x000000ad => "\xad", + 0x0000060c => "\xac", + 0x0000061b => "\xbb", + 0x0000061f => "\xbf", + 0x00000621 => "\xc1", + 0x00000622 => "\xc2", + 0x00000623 => "\xc3", + 0x00000624 => "\xc4", + 0x00000625 => "\xc5", + 0x00000626 => "\xc6", + 0x00000627 => "\xc7", + 0x00000628 => "\xc8", + 0x00000629 => "\xc9", + 0x0000062a => "\xca", + 0x0000062b => "\xcb", + 0x0000062c => "\xcc", + 0x0000062d => "\xcd", + 0x0000062e => "\xce", + 0x0000062f => "\xcf", + 0x00000630 => "\xd0", + 0x00000631 => "\xd1", + 0x00000632 => "\xd2", + 0x00000633 => "\xd3", + 0x00000634 => "\xd4", + 0x00000635 => "\xd5", + 0x00000636 => "\xd6", + 0x00000637 => "\xd7", + 0x00000638 => "\xd8", + 0x00000639 => "\xd9", + 0x0000063a => "\xda", + 0x00000640 => "\xe0", + 0x00000641 => "\xe1", + 0x00000642 => "\xe2", + 0x00000643 => "\xe3", + 0x00000644 => "\xe4", + 0x00000645 => "\xe5", + 0x00000646 => "\xe6", + 0x00000647 => "\xe7", + 0x00000648 => "\xe8", + 0x00000649 => "\xe9", + 0x0000064a => "\xea", + 0x0000064b => "\xeb", + 0x0000064c => "\xec", + 0x0000064d => "\xed", + 0x0000064e => "\xee", + 0x0000064f => "\xef", + 0x00000650 => "\xf0", + 0x00000651 => "\xf1", + 0x00000652 => "\xf2", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_6 - Conversion routines for ISO-8859-6 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-6. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-127 + alias ISO_8859-6:1987 + alias ISO_8859-6 + alias ECMA-114 + alias ASMO-708 + alias ARABIC + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A4 | 000000A4 | CURRENCY SIGN + AC | 0000060C | ARABIC COMMA + AD | 000000AD | SOFT HYPHEN + BB | 0000061B | ARABIC SEMICOLON + BF | 0000061F | ARABIC QUESTION MARK + C1 | 00000621 | ARABIC LETTER HAMZA + C2 | 00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE + C3 | 00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE + C4 | 00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE + C5 | 00000625 | ARABIC LETTER ALEF WITH HAMZA BELOW + C6 | 00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE + C7 | 00000627 | ARABIC LETTER ALEF + C8 | 00000628 | ARABIC LETTER BEH + C9 | 00000629 | ARABIC LETTER TEH MARBUTA + CA | 0000062A | ARABIC LETTER TEH + CB | 0000062B | ARABIC LETTER THEH + CC | 0000062C | ARABIC LETTER JEEM + CD | 0000062D | ARABIC LETTER HAH + CE | 0000062E | ARABIC LETTER KHAH + CF | 0000062F | ARABIC LETTER DAL + D0 | 00000630 | ARABIC LETTER THAL + D1 | 00000631 | ARABIC LETTER REH + D2 | 00000632 | ARABIC LETTER ZAIN + D3 | 00000633 | ARABIC LETTER SEEN + D4 | 00000634 | ARABIC LETTER SHEEN + D5 | 00000635 | ARABIC LETTER SAD + D6 | 00000636 | ARABIC LETTER DAD + D7 | 00000637 | ARABIC LETTER TAH + D8 | 00000638 | ARABIC LETTER ZAH + D9 | 00000639 | ARABIC LETTER AIN + DA | 0000063A | ARABIC LETTER GHAIN + E0 | 00000640 | ARABIC TATWEEL + E1 | 00000641 | ARABIC LETTER FEH + E2 | 00000642 | ARABIC LETTER QAF + E3 | 00000643 | ARABIC LETTER KAF + E4 | 00000644 | ARABIC LETTER LAM + E5 | 00000645 | ARABIC LETTER MEEM + E6 | 00000646 | ARABIC LETTER NOON + E7 | 00000647 | ARABIC LETTER HEH + E8 | 00000648 | ARABIC LETTER WAW + E9 | 00000649 | ARABIC LETTER ALEF MAKSURA + EA | 0000064A | ARABIC LETTER YEH + EB | 0000064B | ARABIC FATHATAN + EC | 0000064C | ARABIC DAMMATAN + ED | 0000064D | ARABIC KASRATAN + EE | 0000064E | ARABIC FATHA + EF | 0000064F | ARABIC DAMMA + F0 | 00000650 | ARABIC KASRA + F1 | 00000651 | ARABIC SHADDA + F2 | 00000652 | ARABIC SUKUN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_7.pm b/lib/Locale/RecodeData/ISO_8859_7.pm new file mode 100644 index 0000000..4955220 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_7.pm @@ -0,0 +1,1134 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-7. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_7; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x2018, + 0x2019, + 0x00a3, + 0xfffd, + 0xfffd, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0xfffd, + 0x00ab, + 0x00ac, + 0x00ad, + 0xfffd, + 0x2015, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x0384, + 0x0385, + 0x0386, + 0x00b7, + 0x0388, + 0x0389, + 0x038a, + 0x00bb, + 0x038c, + 0x00bd, + 0x038e, + 0x038f, + 0x0390, + 0x0391, + 0x0392, + 0x0393, + 0x0394, + 0x0395, + 0x0396, + 0x0397, + 0x0398, + 0x0399, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x039e, + 0x039f, + 0x03a0, + 0x03a1, + 0xfffd, + 0x03a3, + 0x03a4, + 0x03a5, + 0x03a6, + 0x03a7, + 0x03a8, + 0x03a9, + 0x03aa, + 0x03ab, + 0x03ac, + 0x03ad, + 0x03ae, + 0x03af, + 0x03b0, + 0x03b1, + 0x03b2, + 0x03b3, + 0x03b4, + 0x03b5, + 0x03b6, + 0x03b7, + 0x03b8, + 0x03b9, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03be, + 0x03bf, + 0x03c0, + 0x03c1, + 0x03c2, + 0x03c3, + 0x03c4, + 0x03c5, + 0x03c6, + 0x03c7, + 0x03c8, + 0x03c9, + 0x03ca, + 0x03cb, + 0x03cc, + 0x03cd, + 0x03ce, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc2\xa3", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xef\xbf\xbd", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xef\xbf\xbd", + "\xe2\x80\x95", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xce\x84", + "\xce\x85", + "\xce\x86", + "\xc2\xb7", + "\xce\x88", + "\xce\x89", + "\xce\x8a", + "\xc2\xbb", + "\xce\x8c", + "\xc2\xbd", + "\xce\x8e", + "\xce\x8f", + "\xce\x90", + "\xce\x91", + "\xce\x92", + "\xce\x93", + "\xce\x94", + "\xce\x95", + "\xce\x96", + "\xce\x97", + "\xce\x98", + "\xce\x99", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xce\x9e", + "\xce\x9f", + "\xce\xa0", + "\xce\xa1", + "\xef\xbf\xbd", + "\xce\xa3", + "\xce\xa4", + "\xce\xa5", + "\xce\xa6", + "\xce\xa7", + "\xce\xa8", + "\xce\xa9", + "\xce\xaa", + "\xce\xab", + "\xce\xac", + "\xce\xad", + "\xce\xae", + "\xce\xaf", + "\xce\xb0", + "\xce\xb1", + "\xce\xb2", + "\xce\xb3", + "\xce\xb4", + "\xce\xb5", + "\xce\xb6", + "\xce\xb7", + "\xce\xb8", + "\xce\xb9", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbe", + "\xce\xbf", + "\xcf\x80", + "\xcf\x81", + "\xcf\x82", + "\xcf\x83", + "\xcf\x84", + "\xcf\x85", + "\xcf\x86", + "\xcf\x87", + "\xcf\x88", + "\xcf\x89", + "\xcf\x8a", + "\xcf\x8b", + "\xcf\x8c", + "\xcf\x8d", + "\xcf\x8e", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a3 => "\xa3", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b7 => "\xb7", + 0x000000bb => "\xbb", + 0x000000bd => "\xbd", + 0x00000384 => "\xb4", + 0x00000385 => "\xb5", + 0x00000386 => "\xb6", + 0x00000388 => "\xb8", + 0x00000389 => "\xb9", + 0x0000038a => "\xba", + 0x0000038c => "\xbc", + 0x0000038e => "\xbe", + 0x0000038f => "\xbf", + 0x00000390 => "\xc0", + 0x00000391 => "\xc1", + 0x00000392 => "\xc2", + 0x00000393 => "\xc3", + 0x00000394 => "\xc4", + 0x00000395 => "\xc5", + 0x00000396 => "\xc6", + 0x00000397 => "\xc7", + 0x00000398 => "\xc8", + 0x00000399 => "\xc9", + 0x0000039a => "\xca", + 0x0000039b => "\xcb", + 0x0000039c => "\xcc", + 0x0000039d => "\xcd", + 0x0000039e => "\xce", + 0x0000039f => "\xcf", + 0x000003a0 => "\xd0", + 0x000003a1 => "\xd1", + 0x000003a3 => "\xd3", + 0x000003a4 => "\xd4", + 0x000003a5 => "\xd5", + 0x000003a6 => "\xd6", + 0x000003a7 => "\xd7", + 0x000003a8 => "\xd8", + 0x000003a9 => "\xd9", + 0x000003aa => "\xda", + 0x000003ab => "\xdb", + 0x000003ac => "\xdc", + 0x000003ad => "\xdd", + 0x000003ae => "\xde", + 0x000003af => "\xdf", + 0x000003b0 => "\xe0", + 0x000003b1 => "\xe1", + 0x000003b2 => "\xe2", + 0x000003b3 => "\xe3", + 0x000003b4 => "\xe4", + 0x000003b5 => "\xe5", + 0x000003b6 => "\xe6", + 0x000003b7 => "\xe7", + 0x000003b8 => "\xe8", + 0x000003b9 => "\xe9", + 0x000003ba => "\xea", + 0x000003bb => "\xeb", + 0x000003bc => "\xec", + 0x000003bd => "\xed", + 0x000003be => "\xee", + 0x000003bf => "\xef", + 0x000003c0 => "\xf0", + 0x000003c1 => "\xf1", + 0x000003c2 => "\xf2", + 0x000003c3 => "\xf3", + 0x000003c4 => "\xf4", + 0x000003c5 => "\xf5", + 0x000003c6 => "\xf6", + 0x000003c7 => "\xf7", + 0x000003c8 => "\xf8", + 0x000003c9 => "\xf9", + 0x000003ca => "\xfa", + 0x000003cb => "\xfb", + 0x000003cc => "\xfc", + 0x000003cd => "\xfd", + 0x000003ce => "\xfe", + 0x00002015 => "\xaf", + 0x00002018 => "\xa1", + 0x00002019 => "\xa2", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_7 - Conversion routines for ISO-8859-7 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-7. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-126 + alias ISO_8859-7:1987 + alias ISO_8859-7 + alias ELOT_928 + alias ECMA-118 + alias GREEK + alias GREEK8 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00002018 | LEFT SINGLE QUOTATION MARK + A2 | 00002019 | RIGHT SINGLE QUOTATION MARK + A3 | 000000A3 | POUND SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AF | 00002015 | HORIZONTAL BAR + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 00000384 | GREEK TONOS + B5 | 00000385 | GREEK DIALYTIKA TONOS + B6 | 00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS + B7 | 000000B7 | MIDDLE DOT + B8 | 00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS + B9 | 00000389 | GREEK CAPITAL LETTER ETA WITH TONOS + BA | 0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS + BF | 0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS + C0 | 00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + C1 | 00000391 | GREEK CAPITAL LETTER ALPHA + C2 | 00000392 | GREEK CAPITAL LETTER BETA + C3 | 00000393 | GREEK CAPITAL LETTER GAMMA + C4 | 00000394 | GREEK CAPITAL LETTER DELTA + C5 | 00000395 | GREEK CAPITAL LETTER EPSILON + C6 | 00000396 | GREEK CAPITAL LETTER ZETA + C7 | 00000397 | GREEK CAPITAL LETTER ETA + C8 | 00000398 | GREEK CAPITAL LETTER THETA + C9 | 00000399 | GREEK CAPITAL LETTER IOTA + CA | 0000039A | GREEK CAPITAL LETTER KAPPA + CB | 0000039B | GREEK CAPITAL LETTER LAMDA + CC | 0000039C | GREEK CAPITAL LETTER MU + CD | 0000039D | GREEK CAPITAL LETTER NU + CE | 0000039E | GREEK CAPITAL LETTER XI + CF | 0000039F | GREEK CAPITAL LETTER OMICRON + D0 | 000003A0 | GREEK CAPITAL LETTER PI + D1 | 000003A1 | GREEK CAPITAL LETTER RHO + D3 | 000003A3 | GREEK CAPITAL LETTER SIGMA + D4 | 000003A4 | GREEK CAPITAL LETTER TAU + D5 | 000003A5 | GREEK CAPITAL LETTER UPSILON + D6 | 000003A6 | GREEK CAPITAL LETTER PHI + D7 | 000003A7 | GREEK CAPITAL LETTER CHI + D8 | 000003A8 | GREEK CAPITAL LETTER PSI + D9 | 000003A9 | GREEK CAPITAL LETTER OMEGA + DA | 000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + DB | 000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + DC | 000003AC | GREEK SMALL LETTER ALPHA WITH TONOS + DD | 000003AD | GREEK SMALL LETTER EPSILON WITH TONOS + DE | 000003AE | GREEK SMALL LETTER ETA WITH TONOS + DF | 000003AF | GREEK SMALL LETTER IOTA WITH TONOS + E0 | 000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + E1 | 000003B1 | GREEK SMALL LETTER ALPHA + E2 | 000003B2 | GREEK SMALL LETTER BETA + E3 | 000003B3 | GREEK SMALL LETTER GAMMA + E4 | 000003B4 | GREEK SMALL LETTER DELTA + E5 | 000003B5 | GREEK SMALL LETTER EPSILON + E6 | 000003B6 | GREEK SMALL LETTER ZETA + E7 | 000003B7 | GREEK SMALL LETTER ETA + E8 | 000003B8 | GREEK SMALL LETTER THETA + E9 | 000003B9 | GREEK SMALL LETTER IOTA + EA | 000003BA | GREEK SMALL LETTER KAPPA + EB | 000003BB | GREEK SMALL LETTER LAMDA + EC | 000003BC | GREEK SMALL LETTER MU + ED | 000003BD | GREEK SMALL LETTER NU + EE | 000003BE | GREEK SMALL LETTER XI + EF | 000003BF | GREEK SMALL LETTER OMICRON + F0 | 000003C0 | GREEK SMALL LETTER PI + F1 | 000003C1 | GREEK SMALL LETTER RHO + F2 | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + F3 | 000003C3 | GREEK SMALL LETTER SIGMA + F4 | 000003C4 | GREEK SMALL LETTER TAU + F5 | 000003C5 | GREEK SMALL LETTER UPSILON + F6 | 000003C6 | GREEK SMALL LETTER PHI + F7 | 000003C7 | GREEK SMALL LETTER CHI + F8 | 000003C8 | GREEK SMALL LETTER PSI + F9 | 000003C9 | GREEK SMALL LETTER OMEGA + FA | 000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA + FB | 000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA + FC | 000003CC | GREEK SMALL LETTER OMICRON WITH TONOS + FD | 000003CD | GREEK SMALL LETTER UPSILON WITH TONOS + FE | 000003CE | GREEK SMALL LETTER OMEGA WITH TONOS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_8.pm b/lib/Locale/RecodeData/ISO_8859_8.pm new file mode 100644 index 0000000..ab19be8 --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_8.pm @@ -0,0 +1,1071 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-8. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_8; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0x00a2, + 0x00a3, + 0x00a4, + 0x00a5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x00d7, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00af, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00b8, + 0x00b9, + 0x00f7, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 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, + 0xfffd, + 0xfffd, + 0x200e, + 0x200f, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xef\xbf\xbd", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc3\x97", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc2\xb9", + "\xc3\xb7", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x97", + "\xd7\x90", + "\xd7\x91", + "\xd7\x92", + "\xd7\x93", + "\xd7\x94", + "\xd7\x95", + "\xd7\x96", + "\xd7\x97", + "\xd7\x98", + "\xd7\x99", + "\xd7\x9a", + "\xd7\x9b", + "\xd7\x9c", + "\xd7\x9d", + "\xd7\x9e", + "\xd7\x9f", + "\xd7\xa0", + "\xd7\xa1", + "\xd7\xa2", + "\xd7\xa3", + "\xd7\xa4", + "\xd7\xa5", + "\xd7\xa6", + "\xd7\xa7", + "\xd7\xa8", + "\xd7\xa9", + "\xd7\xaa", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x8e", + "\xe2\x80\x8f", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000b9 => "\xb9", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000d7 => "\xaa", + 0x000000f7 => "\xba", + 0x000005d0 => "\xe0", + 0x000005d1 => "\xe1", + 0x000005d2 => "\xe2", + 0x000005d3 => "\xe3", + 0x000005d4 => "\xe4", + 0x000005d5 => "\xe5", + 0x000005d6 => "\xe6", + 0x000005d7 => "\xe7", + 0x000005d8 => "\xe8", + 0x000005d9 => "\xe9", + 0x000005da => "\xea", + 0x000005db => "\xeb", + 0x000005dc => "\xec", + 0x000005dd => "\xed", + 0x000005de => "\xee", + 0x000005df => "\xef", + 0x000005e0 => "\xf0", + 0x000005e1 => "\xf1", + 0x000005e2 => "\xf2", + 0x000005e3 => "\xf3", + 0x000005e4 => "\xf4", + 0x000005e5 => "\xf5", + 0x000005e6 => "\xf6", + 0x000005e7 => "\xf7", + 0x000005e8 => "\xf8", + 0x000005e9 => "\xf9", + 0x000005ea => "\xfa", + 0x0000200e => "\xfd", + 0x0000200f => "\xfe", + 0x00002017 => "\xdf", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_8 - Conversion routines for ISO-8859-8 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-8. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-138 + alias ISO_8859-8:1988 + alias ISO_8859-8 + alias HEBREW + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000D7 | MULTIPLICATION SIGN + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000F7 | DIVISION SIGN + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + DF | 00002017 | DOUBLE LOW LINE + E0 | 000005D0 | HEBREW LETTER ALEF + E1 | 000005D1 | HEBREW LETTER BET + E2 | 000005D2 | HEBREW LETTER GIMEL + E3 | 000005D3 | HEBREW LETTER DALET + E4 | 000005D4 | HEBREW LETTER HE + E5 | 000005D5 | HEBREW LETTER VAV + E6 | 000005D6 | HEBREW LETTER ZAYIN + E7 | 000005D7 | HEBREW LETTER HET + E8 | 000005D8 | HEBREW LETTER TET + E9 | 000005D9 | HEBREW LETTER YOD + EA | 000005DA | HEBREW LETTER FINAL KAF + EB | 000005DB | HEBREW LETTER KAF + EC | 000005DC | HEBREW LETTER LAMED + ED | 000005DD | HEBREW LETTER FINAL MEM + EE | 000005DE | HEBREW LETTER MEM + EF | 000005DF | HEBREW LETTER FINAL NUN + F0 | 000005E0 | HEBREW LETTER NUN + F1 | 000005E1 | HEBREW LETTER SAMEKH + F2 | 000005E2 | HEBREW LETTER AYIN + F3 | 000005E3 | HEBREW LETTER FINAL PE + F4 | 000005E4 | HEBREW LETTER PE + F5 | 000005E5 | HEBREW LETTER FINAL TSADI + F6 | 000005E6 | HEBREW LETTER TSADI + F7 | 000005E7 | HEBREW LETTER QOF + F8 | 000005E8 | HEBREW LETTER RESH + F9 | 000005E9 | HEBREW LETTER SHIN + FA | 000005EA | HEBREW LETTER TAV + FD | 0000200E | LEFT-TO-RIGHT MARK + FE | 0000200F | RIGHT-TO-LEFT MARK + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/ISO_8859_9.pm b/lib/Locale/RecodeData/ISO_8859_9.pm new file mode 100644 index 0000000..1f0299f --- /dev/null +++ b/lib/Locale/RecodeData/ISO_8859_9.pm @@ -0,0 +1,1144 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for ISO-8859-9. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::ISO_8859_9; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00a1, + 0x00a2, + 0x00a3, + 0x00a4, + 0x00a5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x00aa, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x00af, + 0x00b0, + 0x00b1, + 0x00b2, + 0x00b3, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x00b8, + 0x00b9, + 0x00ba, + 0x00bb, + 0x00bc, + 0x00bd, + 0x00be, + 0x00bf, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0x011e, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x00d7, + 0x00d8, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x0130, + 0x015e, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x011f, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00f7, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x0131, + 0x015f, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\x80", + "\xc2\x81", + "\xc2\x82", + "\xc2\x83", + "\xc2\x84", + "\xc2\x85", + "\xc2\x86", + "\xc2\x87", + "\xc2\x88", + "\xc2\x89", + "\xc2\x8a", + "\xc2\x8b", + "\xc2\x8c", + "\xc2\x8d", + "\xc2\x8e", + "\xc2\x8f", + "\xc2\x90", + "\xc2\x91", + "\xc2\x92", + "\xc2\x93", + "\xc2\x94", + "\xc2\x95", + "\xc2\x96", + "\xc2\x97", + "\xc2\x98", + "\xc2\x99", + "\xc2\x9a", + "\xc2\x9b", + "\xc2\x9c", + "\xc2\x9d", + "\xc2\x9e", + "\xc2\x9f", + "\xc2\xa0", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa4", + "\xc2\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc2\xaa", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc2\xaf", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xc2\xb3", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc2\xb8", + "\xc2\xb9", + "\xc2\xba", + "\xc2\xbb", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc2\xbf", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc4\x9e", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc3\x98", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc4\xb0", + "\xc5\x9e", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc4\x9f", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc4\xb1", + "\xc5\x9f", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000080 => "\x80", + 0x00000081 => "\x81", + 0x00000082 => "\x82", + 0x00000083 => "\x83", + 0x00000084 => "\x84", + 0x00000085 => "\x85", + 0x00000086 => "\x86", + 0x00000087 => "\x87", + 0x00000088 => "\x88", + 0x00000089 => "\x89", + 0x0000008a => "\x8a", + 0x0000008b => "\x8b", + 0x0000008c => "\x8c", + 0x0000008d => "\x8d", + 0x0000008e => "\x8e", + 0x0000008f => "\x8f", + 0x00000090 => "\x90", + 0x00000091 => "\x91", + 0x00000092 => "\x92", + 0x00000093 => "\x93", + 0x00000094 => "\x94", + 0x00000095 => "\x95", + 0x00000096 => "\x96", + 0x00000097 => "\x97", + 0x00000098 => "\x98", + 0x00000099 => "\x99", + 0x0000009a => "\x9a", + 0x0000009b => "\x9b", + 0x0000009c => "\x9c", + 0x0000009d => "\x9d", + 0x0000009e => "\x9e", + 0x0000009f => "\x9f", + 0x000000a0 => "\xa0", + 0x000000a1 => "\xa1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000aa => "\xaa", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000af => "\xaf", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b3 => "\xb3", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000b8 => "\xb8", + 0x000000b9 => "\xb9", + 0x000000ba => "\xba", + 0x000000bb => "\xbb", + 0x000000bc => "\xbc", + 0x000000bd => "\xbd", + 0x000000be => "\xbe", + 0x000000bf => "\xbf", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d1 => "\xd1", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d8 => "\xd8", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000ff => "\xff", + 0x0000011e => "\xd0", + 0x0000011f => "\xf0", + 0x00000130 => "\xdd", + 0x00000131 => "\xfd", + 0x0000015e => "\xde", + 0x0000015f => "\xfe", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::ISO_8859_9 - Conversion routines for ISO-8859-9 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for ISO-8859-9. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-148 + alias ISO_8859-9:1989 + alias ISO_8859-9 + alias LATIN5 + alias L5 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000080 | PADDING CHARACTER (PAD) + 81 | 00000081 | HIGH OCTET PRESET (HOP) + 82 | 00000082 | BREAK PERMITTED HERE (BPH) + 83 | 00000083 | NO BREAK HERE (NBH) + 84 | 00000084 | INDEX (IND) + 85 | 00000085 | NEXT LINE (NEL) + 86 | 00000086 | START OF SELECTED AREA (SSA) + 87 | 00000087 | END OF SELECTED AREA (ESA) + 88 | 00000088 | CHARACTER TABULATION SET (HTS) + 89 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + 8A | 0000008A | LINE TABULATION SET (VTS) + 8B | 0000008B | PARTIAL LINE FORWARD (PLD) + 8C | 0000008C | PARTIAL LINE BACKWARD (PLU) + 8D | 0000008D | REVERSE LINE FEED (RI) + 8E | 0000008E | SINGLE-SHIFT TWO (SS2) + 8F | 0000008F | SINGLE-SHIFT THREE (SS3) + 90 | 00000090 | DEVICE CONTROL STRING (DCS) + 91 | 00000091 | PRIVATE USE ONE (PU1) + 92 | 00000092 | PRIVATE USE TWO (PU2) + 93 | 00000093 | SET TRANSMIT STATE (STS) + 94 | 00000094 | CANCEL CHARACTER (CCH) + 95 | 00000095 | MESSAGE WAITING (MW) + 96 | 00000096 | START OF GUARDED AREA (SPA) + 97 | 00000097 | END OF GUARDED AREA (EPA) + 98 | 00000098 | START OF STRING (SOS) + 99 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + 9A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI) + 9B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI) + 9C | 0000009C | STRING TERMINATOR (ST) + 9D | 0000009D | OPERATING SYSTEM COMMAND (OSC) + 9E | 0000009E | PRIVACY MESSAGE (PM) + 9F | 0000009F | APPLICATION PROGRAM COMMAND (APC) + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000000A5 | YEN SIGN + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000000AA | FEMININE ORDINAL INDICATOR + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 000000AF | MACRON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 000000B3 | SUPERSCRIPT THREE + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 000000B8 | CEDILLA + B9 | 000000B9 | SUPERSCRIPT ONE + BA | 000000BA | MASCULINE ORDINAL INDICATOR + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 000000BC | VULGAR FRACTION ONE QUARTER + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 000000BE | VULGAR FRACTION THREE QUARTERS + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 0000011E | LATIN CAPITAL LETTER G WITH BREVE + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE + DE | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 0000011F | LATIN SMALL LETTER G WITH BREVE + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 00000131 | LATIN SMALL LETTER DOTLESS I + FE | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/KOI8_R.pm b/lib/Locale/RecodeData/KOI8_R.pm new file mode 100644 index 0000000..cdc9d82 --- /dev/null +++ b/lib/Locale/RecodeData/KOI8_R.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for KOI8-R. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::KOI8_R; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x2553, + 0x2554, + 0x2555, + 0x2556, + 0x2557, + 0x2558, + 0x2559, + 0x255a, + 0x255b, + 0x255c, + 0x255d, + 0x255e, + 0x255f, + 0x2560, + 0x2561, + 0x0401, + 0x2562, + 0x2563, + 0x2564, + 0x2565, + 0x2566, + 0x2567, + 0x2568, + 0x2569, + 0x256a, + 0x256b, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x94\x80", + "\xe2\x94\x82", + "\xe2\x94\x8c", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\x98", + "\xe2\x94\x9c", + "\xe2\x94\xa4", + "\xe2\x94\xac", + "\xe2\x94\xb4", + "\xe2\x94\xbc", + "\xe2\x96\x80", + "\xe2\x96\x84", + "\xe2\x96\x88", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x8c\xa0", + "\xe2\x96\xa0", + "\xe2\x88\x99", + "\xe2\x88\x9a", + "\xe2\x89\x88", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xc2\xa0", + "\xe2\x8c\xa1", + "\xc2\xb0", + "\xc2\xb2", + "\xc2\xb7", + "\xc3\xb7", + "\xe2\x95\x90", + "\xe2\x95\x91", + "\xe2\x95\x92", + "\xd1\x91", + "\xe2\x95\x93", + "\xe2\x95\x94", + "\xe2\x95\x95", + "\xe2\x95\x96", + "\xe2\x95\x97", + "\xe2\x95\x98", + "\xe2\x95\x99", + "\xe2\x95\x9a", + "\xe2\x95\x9b", + "\xe2\x95\x9c", + "\xe2\x95\x9d", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\xa0", + "\xe2\x95\xa1", + "\xd0\x81", + "\xe2\x95\xa2", + "\xe2\x95\xa3", + "\xe2\x95\xa4", + "\xe2\x95\xa5", + "\xe2\x95\xa6", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa9", + "\xe2\x95\xaa", + "\xe2\x95\xab", + "\xe2\x95\xac", + "\xc2\xa9", + "\xd1\x8e", + "\xd0\xb0", + "\xd0\xb1", + "\xd1\x86", + "\xd0\xb4", + "\xd0\xb5", + "\xd1\x84", + "\xd0\xb3", + "\xd1\x85", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x8f", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd0\xb6", + "\xd0\xb2", + "\xd1\x8c", + "\xd1\x8b", + "\xd0\xb7", + "\xd1\x88", + "\xd1\x8d", + "\xd1\x89", + "\xd1\x87", + "\xd1\x8a", + "\xd0\xae", + "\xd0\x90", + "\xd0\x91", + "\xd0\xa6", + "\xd0\x94", + "\xd0\x95", + "\xd0\xa4", + "\xd0\x93", + "\xd0\xa5", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xaf", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\x96", + "\xd0\x92", + "\xd0\xac", + "\xd0\xab", + "\xd0\x97", + "\xd0\xa8", + "\xd0\xad", + "\xd0\xa9", + "\xd0\xa7", + "\xd0\xaa", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\x9a", + 0x000000a9 => "\xbf", + 0x000000b0 => "\x9c", + 0x000000b2 => "\x9d", + 0x000000b7 => "\x9e", + 0x000000f7 => "\x9f", + 0x00000401 => "\xb3", + 0x00000410 => "\xe1", + 0x00000411 => "\xe2", + 0x00000412 => "\xf7", + 0x00000413 => "\xe7", + 0x00000414 => "\xe4", + 0x00000415 => "\xe5", + 0x00000416 => "\xf6", + 0x00000417 => "\xfa", + 0x00000418 => "\xe9", + 0x00000419 => "\xea", + 0x0000041a => "\xeb", + 0x0000041b => "\xec", + 0x0000041c => "\xed", + 0x0000041d => "\xee", + 0x0000041e => "\xef", + 0x0000041f => "\xf0", + 0x00000420 => "\xf2", + 0x00000421 => "\xf3", + 0x00000422 => "\xf4", + 0x00000423 => "\xf5", + 0x00000424 => "\xe6", + 0x00000425 => "\xe8", + 0x00000426 => "\xe3", + 0x00000427 => "\xfe", + 0x00000428 => "\xfb", + 0x00000429 => "\xfd", + 0x0000042a => "\xff", + 0x0000042b => "\xf9", + 0x0000042c => "\xf8", + 0x0000042d => "\xfc", + 0x0000042e => "\xe0", + 0x0000042f => "\xf1", + 0x00000430 => "\xc1", + 0x00000431 => "\xc2", + 0x00000432 => "\xd7", + 0x00000433 => "\xc7", + 0x00000434 => "\xc4", + 0x00000435 => "\xc5", + 0x00000436 => "\xd6", + 0x00000437 => "\xda", + 0x00000438 => "\xc9", + 0x00000439 => "\xca", + 0x0000043a => "\xcb", + 0x0000043b => "\xcc", + 0x0000043c => "\xcd", + 0x0000043d => "\xce", + 0x0000043e => "\xcf", + 0x0000043f => "\xd0", + 0x00000440 => "\xd2", + 0x00000441 => "\xd3", + 0x00000442 => "\xd4", + 0x00000443 => "\xd5", + 0x00000444 => "\xc6", + 0x00000445 => "\xc8", + 0x00000446 => "\xc3", + 0x00000447 => "\xde", + 0x00000448 => "\xdb", + 0x00000449 => "\xdd", + 0x0000044a => "\xdf", + 0x0000044b => "\xd9", + 0x0000044c => "\xd8", + 0x0000044d => "\xdc", + 0x0000044e => "\xc0", + 0x0000044f => "\xd1", + 0x00000451 => "\xa3", + 0x00002219 => "\x95", + 0x0000221a => "\x96", + 0x00002248 => "\x97", + 0x00002264 => "\x98", + 0x00002265 => "\x99", + 0x00002320 => "\x93", + 0x00002321 => "\x9b", + 0x00002500 => "\x80", + 0x00002502 => "\x81", + 0x0000250c => "\x82", + 0x00002510 => "\x83", + 0x00002514 => "\x84", + 0x00002518 => "\x85", + 0x0000251c => "\x86", + 0x00002524 => "\x87", + 0x0000252c => "\x88", + 0x00002534 => "\x89", + 0x0000253c => "\x8a", + 0x00002550 => "\xa0", + 0x00002551 => "\xa1", + 0x00002552 => "\xa2", + 0x00002553 => "\xa4", + 0x00002554 => "\xa5", + 0x00002555 => "\xa6", + 0x00002556 => "\xa7", + 0x00002557 => "\xa8", + 0x00002558 => "\xa9", + 0x00002559 => "\xaa", + 0x0000255a => "\xab", + 0x0000255b => "\xac", + 0x0000255c => "\xad", + 0x0000255d => "\xae", + 0x0000255e => "\xaf", + 0x0000255f => "\xb0", + 0x00002560 => "\xb1", + 0x00002561 => "\xb2", + 0x00002562 => "\xb4", + 0x00002563 => "\xb5", + 0x00002564 => "\xb6", + 0x00002565 => "\xb7", + 0x00002566 => "\xb8", + 0x00002567 => "\xb9", + 0x00002568 => "\xba", + 0x00002569 => "\xbb", + 0x0000256a => "\xbc", + 0x0000256b => "\xbd", + 0x0000256c => "\xbe", + 0x00002580 => "\x8b", + 0x00002584 => "\x8c", + 0x00002588 => "\x8d", + 0x0000258c => "\x8e", + 0x00002590 => "\x8f", + 0x00002591 => "\x90", + 0x00002592 => "\x91", + 0x00002593 => "\x92", + 0x000025a0 => "\x94", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::KOI8_R - Conversion routines for KOI8-R + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for KOI8-R. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: RFC1489 via Gabor Kiss Ekissg@sztaki.huE + and Andrey A. Chernov Eache@astral.msk.suE + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + 81 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + 82 | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + 83 | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + 84 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + 85 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + 86 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 87 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + 88 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 89 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + 8A | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 8B | 00002580 | UPPER HALF BLOCK + 8C | 00002584 | LOWER HALF BLOCK + 8D | 00002588 | FULL BLOCK + 8E | 0000258C | LEFT HALF BLOCK + 8F | 00002590 | RIGHT HALF BLOCK + 90 | 00002591 | LIGHT SHADE + 91 | 00002592 | MEDIUM SHADE + 92 | 00002593 | DARK SHADE + 93 | 00002320 | TOP HALF INTEGRAL + 94 | 000025A0 | BLACK SQUARE + 95 | 00002219 | BULLET OPERATOR + 96 | 0000221A | SQUARE ROOT + 97 | 00002248 | ALMOST EQUAL TO + 98 | 00002264 | LESS-THAN OR EQUAL TO + 99 | 00002265 | GREATER-THAN OR EQUAL TO + 9A | 000000A0 | NO-BREAK SPACE + 9B | 00002321 | BOTTOM HALF INTEGRAL + 9C | 000000B0 | DEGREE SIGN + 9D | 000000B2 | SUPERSCRIPT TWO + 9E | 000000B7 | MIDDLE DOT + 9F | 000000F7 | DIVISION SIGN + A0 | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + A1 | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + A2 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + A3 | 00000451 | CYRILLIC SMALL LETTER IO + A4 | 00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + A5 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + A6 | 00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + A7 | 00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + A8 | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + A9 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + AA | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + AB | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + AC | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + AD | 0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + AE | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + AF | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + B0 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + B1 | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + B2 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B3 | 00000401 | CYRILLIC CAPITAL LETTER IO + B4 | 00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + B5 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + B6 | 00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + B7 | 00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + B8 | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + B9 | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + BA | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + BB | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + BC | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + BD | 0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + BE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + BF | 000000A9 | COPYRIGHT SIGN + C0 | 0000044E | CYRILLIC SMALL LETTER YU + C1 | 00000430 | CYRILLIC SMALL LETTER A + C2 | 00000431 | CYRILLIC SMALL LETTER BE + C3 | 00000446 | CYRILLIC SMALL LETTER TSE + C4 | 00000434 | CYRILLIC SMALL LETTER DE + C5 | 00000435 | CYRILLIC SMALL LETTER IE + C6 | 00000444 | CYRILLIC SMALL LETTER EF + C7 | 00000433 | CYRILLIC SMALL LETTER GHE + C8 | 00000445 | CYRILLIC SMALL LETTER HA + C9 | 00000438 | CYRILLIC SMALL LETTER I + CA | 00000439 | CYRILLIC SMALL LETTER SHORT I + CB | 0000043A | CYRILLIC SMALL LETTER KA + CC | 0000043B | CYRILLIC SMALL LETTER EL + CD | 0000043C | CYRILLIC SMALL LETTER EM + CE | 0000043D | CYRILLIC SMALL LETTER EN + CF | 0000043E | CYRILLIC SMALL LETTER O + D0 | 0000043F | CYRILLIC SMALL LETTER PE + D1 | 0000044F | CYRILLIC SMALL LETTER YA + D2 | 00000440 | CYRILLIC SMALL LETTER ER + D3 | 00000441 | CYRILLIC SMALL LETTER ES + D4 | 00000442 | CYRILLIC SMALL LETTER TE + D5 | 00000443 | CYRILLIC SMALL LETTER U + D6 | 00000436 | CYRILLIC SMALL LETTER ZHE + D7 | 00000432 | CYRILLIC SMALL LETTER VE + D8 | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + D9 | 0000044B | CYRILLIC SMALL LETTER YERU + DA | 00000437 | CYRILLIC SMALL LETTER ZE + DB | 00000448 | CYRILLIC SMALL LETTER SHA + DC | 0000044D | CYRILLIC SMALL LETTER E + DD | 00000449 | CYRILLIC SMALL LETTER SHCHA + DE | 00000447 | CYRILLIC SMALL LETTER CHE + DF | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + E0 | 0000042E | CYRILLIC CAPITAL LETTER YU + E1 | 00000410 | CYRILLIC CAPITAL LETTER A + E2 | 00000411 | CYRILLIC CAPITAL LETTER BE + E3 | 00000426 | CYRILLIC CAPITAL LETTER TSE + E4 | 00000414 | CYRILLIC CAPITAL LETTER DE + E5 | 00000415 | CYRILLIC CAPITAL LETTER IE + E6 | 00000424 | CYRILLIC CAPITAL LETTER EF + E7 | 00000413 | CYRILLIC CAPITAL LETTER GHE + E8 | 00000425 | CYRILLIC CAPITAL LETTER HA + E9 | 00000418 | CYRILLIC CAPITAL LETTER I + EA | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + EB | 0000041A | CYRILLIC CAPITAL LETTER KA + EC | 0000041B | CYRILLIC CAPITAL LETTER EL + ED | 0000041C | CYRILLIC CAPITAL LETTER EM + EE | 0000041D | CYRILLIC CAPITAL LETTER EN + EF | 0000041E | CYRILLIC CAPITAL LETTER O + F0 | 0000041F | CYRILLIC CAPITAL LETTER PE + F1 | 0000042F | CYRILLIC CAPITAL LETTER YA + F2 | 00000420 | CYRILLIC CAPITAL LETTER ER + F3 | 00000421 | CYRILLIC CAPITAL LETTER ES + F4 | 00000422 | CYRILLIC CAPITAL LETTER TE + F5 | 00000423 | CYRILLIC CAPITAL LETTER U + F6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + F7 | 00000412 | CYRILLIC CAPITAL LETTER VE + F8 | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + F9 | 0000042B | CYRILLIC CAPITAL LETTER YERU + FA | 00000417 | CYRILLIC CAPITAL LETTER ZE + FB | 00000428 | CYRILLIC CAPITAL LETTER SHA + FC | 0000042D | CYRILLIC CAPITAL LETTER E + FD | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + FE | 00000427 | CYRILLIC CAPITAL LETTER CHE + FF | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/KOI8_RU.pm b/lib/Locale/RecodeData/KOI8_RU.pm new file mode 100644 index 0000000..b12bcbf --- /dev/null +++ b/lib/Locale/RecodeData/KOI8_RU.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for KOI8-RU. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::KOI8_RU; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x045e, + 0x255e, + 0x255f, + 0x2560, + 0x2561, + 0x0401, + 0x0404, + 0x2563, + 0x0406, + 0x0407, + 0x2566, + 0x2567, + 0x2568, + 0x2569, + 0x256a, + 0x0490, + 0x040e, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x94\x80", + "\xe2\x94\x82", + "\xe2\x94\x8c", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\x98", + "\xe2\x94\x9c", + "\xe2\x94\xa4", + "\xe2\x94\xac", + "\xe2\x94\xb4", + "\xe2\x94\xbc", + "\xe2\x96\x80", + "\xe2\x96\x84", + "\xe2\x96\x88", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x8c\xa0", + "\xe2\x96\xa0", + "\xe2\x88\x99", + "\xe2\x88\x9a", + "\xe2\x89\x88", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xc2\xa0", + "\xe2\x8c\xa1", + "\xc2\xb0", + "\xc2\xb2", + "\xc2\xb7", + "\xc3\xb7", + "\xe2\x95\x90", + "\xe2\x95\x91", + "\xe2\x95\x92", + "\xd1\x91", + "\xd1\x94", + "\xe2\x95\x94", + "\xd1\x96", + "\xd1\x97", + "\xe2\x95\x97", + "\xe2\x95\x98", + "\xe2\x95\x99", + "\xe2\x95\x9a", + "\xe2\x95\x9b", + "\xd2\x91", + "\xd1\x9e", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\xa0", + "\xe2\x95\xa1", + "\xd0\x81", + "\xd0\x84", + "\xe2\x95\xa3", + "\xd0\x86", + "\xd0\x87", + "\xe2\x95\xa6", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa9", + "\xe2\x95\xaa", + "\xd2\x90", + "\xd0\x8e", + "\xc2\xa9", + "\xd1\x8e", + "\xd0\xb0", + "\xd0\xb1", + "\xd1\x86", + "\xd0\xb4", + "\xd0\xb5", + "\xd1\x84", + "\xd0\xb3", + "\xd1\x85", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x8f", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd0\xb6", + "\xd0\xb2", + "\xd1\x8c", + "\xd1\x8b", + "\xd0\xb7", + "\xd1\x88", + "\xd1\x8d", + "\xd1\x89", + "\xd1\x87", + "\xd1\x8a", + "\xd0\xae", + "\xd0\x90", + "\xd0\x91", + "\xd0\xa6", + "\xd0\x94", + "\xd0\x95", + "\xd0\xa4", + "\xd0\x93", + "\xd0\xa5", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xaf", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\x96", + "\xd0\x92", + "\xd0\xac", + "\xd0\xab", + "\xd0\x97", + "\xd0\xa8", + "\xd0\xad", + "\xd0\xa9", + "\xd0\xa7", + "\xd0\xaa", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\x9a", + 0x000000a9 => "\xbf", + 0x000000b0 => "\x9c", + 0x000000b2 => "\x9d", + 0x000000b7 => "\x9e", + 0x000000f7 => "\x9f", + 0x00000401 => "\xb3", + 0x00000404 => "\xb4", + 0x00000406 => "\xb6", + 0x00000407 => "\xb7", + 0x0000040e => "\xbe", + 0x00000410 => "\xe1", + 0x00000411 => "\xe2", + 0x00000412 => "\xf7", + 0x00000413 => "\xe7", + 0x00000414 => "\xe4", + 0x00000415 => "\xe5", + 0x00000416 => "\xf6", + 0x00000417 => "\xfa", + 0x00000418 => "\xe9", + 0x00000419 => "\xea", + 0x0000041a => "\xeb", + 0x0000041b => "\xec", + 0x0000041c => "\xed", + 0x0000041d => "\xee", + 0x0000041e => "\xef", + 0x0000041f => "\xf0", + 0x00000420 => "\xf2", + 0x00000421 => "\xf3", + 0x00000422 => "\xf4", + 0x00000423 => "\xf5", + 0x00000424 => "\xe6", + 0x00000425 => "\xe8", + 0x00000426 => "\xe3", + 0x00000427 => "\xfe", + 0x00000428 => "\xfb", + 0x00000429 => "\xfd", + 0x0000042a => "\xff", + 0x0000042b => "\xf9", + 0x0000042c => "\xf8", + 0x0000042d => "\xfc", + 0x0000042e => "\xe0", + 0x0000042f => "\xf1", + 0x00000430 => "\xc1", + 0x00000431 => "\xc2", + 0x00000432 => "\xd7", + 0x00000433 => "\xc7", + 0x00000434 => "\xc4", + 0x00000435 => "\xc5", + 0x00000436 => "\xd6", + 0x00000437 => "\xda", + 0x00000438 => "\xc9", + 0x00000439 => "\xca", + 0x0000043a => "\xcb", + 0x0000043b => "\xcc", + 0x0000043c => "\xcd", + 0x0000043d => "\xce", + 0x0000043e => "\xcf", + 0x0000043f => "\xd0", + 0x00000440 => "\xd2", + 0x00000441 => "\xd3", + 0x00000442 => "\xd4", + 0x00000443 => "\xd5", + 0x00000444 => "\xc6", + 0x00000445 => "\xc8", + 0x00000446 => "\xc3", + 0x00000447 => "\xde", + 0x00000448 => "\xdb", + 0x00000449 => "\xdd", + 0x0000044a => "\xdf", + 0x0000044b => "\xd9", + 0x0000044c => "\xd8", + 0x0000044d => "\xdc", + 0x0000044e => "\xc0", + 0x0000044f => "\xd1", + 0x00000451 => "\xa3", + 0x00000454 => "\xa4", + 0x00000456 => "\xa6", + 0x00000457 => "\xa7", + 0x0000045e => "\xae", + 0x00000490 => "\xbd", + 0x00000491 => "\xad", + 0x00002219 => "\x95", + 0x0000221a => "\x96", + 0x00002248 => "\x97", + 0x00002264 => "\x98", + 0x00002265 => "\x99", + 0x00002320 => "\x93", + 0x00002321 => "\x9b", + 0x00002500 => "\x80", + 0x00002502 => "\x81", + 0x0000250c => "\x82", + 0x00002510 => "\x83", + 0x00002514 => "\x84", + 0x00002518 => "\x85", + 0x0000251c => "\x86", + 0x00002524 => "\x87", + 0x0000252c => "\x88", + 0x00002534 => "\x89", + 0x0000253c => "\x8a", + 0x00002550 => "\xa0", + 0x00002551 => "\xa1", + 0x00002552 => "\xa2", + 0x00002554 => "\xa5", + 0x00002557 => "\xa8", + 0x00002558 => "\xa9", + 0x00002559 => "\xaa", + 0x0000255a => "\xab", + 0x0000255b => "\xac", + 0x0000255e => "\xaf", + 0x0000255f => "\xb0", + 0x00002560 => "\xb1", + 0x00002561 => "\xb2", + 0x00002563 => "\xb5", + 0x00002566 => "\xb8", + 0x00002567 => "\xb9", + 0x00002568 => "\xba", + 0x00002569 => "\xbb", + 0x0000256a => "\xbc", + 0x00002580 => "\x8b", + 0x00002584 => "\x8c", + 0x00002588 => "\x8d", + 0x0000258c => "\x8e", + 0x00002590 => "\x8f", + 0x00002591 => "\x90", + 0x00002592 => "\x91", + 0x00002593 => "\x92", + 0x000025a0 => "\x94", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::KOI8_RU - Conversion routines for KOI8-RU + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for KOI8-RU. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + 81 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + 82 | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + 83 | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + 84 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + 85 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + 86 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 87 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + 88 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 89 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + 8A | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 8B | 00002580 | UPPER HALF BLOCK + 8C | 00002584 | LOWER HALF BLOCK + 8D | 00002588 | FULL BLOCK + 8E | 0000258C | LEFT HALF BLOCK + 8F | 00002590 | RIGHT HALF BLOCK + 90 | 00002591 | LIGHT SHADE + 91 | 00002592 | MEDIUM SHADE + 92 | 00002593 | DARK SHADE + 93 | 00002320 | TOP HALF INTEGRAL + 94 | 000025A0 | BLACK SQUARE + 95 | 00002219 | BULLET OPERATOR + 96 | 0000221A | SQUARE ROOT + 97 | 00002248 | ALMOST EQUAL TO + 98 | 00002264 | LESS-THAN OR EQUAL TO + 99 | 00002265 | GREATER-THAN OR EQUAL TO + 9A | 000000A0 | NO-BREAK SPACE + 9B | 00002321 | BOTTOM HALF INTEGRAL + 9C | 000000B0 | DEGREE SIGN + 9D | 000000B2 | SUPERSCRIPT TWO + 9E | 000000B7 | MIDDLE DOT + 9F | 000000F7 | DIVISION SIGN + A0 | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + A1 | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + A2 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + A3 | 00000451 | CYRILLIC SMALL LETTER IO + A4 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + A5 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + A6 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + A7 | 00000457 | CYRILLIC SMALL LETTER YI + A8 | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + A9 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + AA | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + AB | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + AC | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + AD | 00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN + AE | 0000045E | CYRILLIC SMALL LETTER SHORT U + AF | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + B0 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + B1 | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + B2 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B3 | 00000401 | CYRILLIC CAPITAL LETTER IO + B4 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + B5 | 00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT + B6 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + B7 | 00000407 | CYRILLIC CAPITAL LETTER YI + B8 | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + B9 | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + BA | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + BB | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + BC | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + BD | 00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN + BE | 0000040E | CYRILLIC CAPITAL LETTER SHORT U + BF | 000000A9 | COPYRIGHT SIGN + C0 | 0000044E | CYRILLIC SMALL LETTER YU + C1 | 00000430 | CYRILLIC SMALL LETTER A + C2 | 00000431 | CYRILLIC SMALL LETTER BE + C3 | 00000446 | CYRILLIC SMALL LETTER TSE + C4 | 00000434 | CYRILLIC SMALL LETTER DE + C5 | 00000435 | CYRILLIC SMALL LETTER IE + C6 | 00000444 | CYRILLIC SMALL LETTER EF + C7 | 00000433 | CYRILLIC SMALL LETTER GHE + C8 | 00000445 | CYRILLIC SMALL LETTER HA + C9 | 00000438 | CYRILLIC SMALL LETTER I + CA | 00000439 | CYRILLIC SMALL LETTER SHORT I + CB | 0000043A | CYRILLIC SMALL LETTER KA + CC | 0000043B | CYRILLIC SMALL LETTER EL + CD | 0000043C | CYRILLIC SMALL LETTER EM + CE | 0000043D | CYRILLIC SMALL LETTER EN + CF | 0000043E | CYRILLIC SMALL LETTER O + D0 | 0000043F | CYRILLIC SMALL LETTER PE + D1 | 0000044F | CYRILLIC SMALL LETTER YA + D2 | 00000440 | CYRILLIC SMALL LETTER ER + D3 | 00000441 | CYRILLIC SMALL LETTER ES + D4 | 00000442 | CYRILLIC SMALL LETTER TE + D5 | 00000443 | CYRILLIC SMALL LETTER U + D6 | 00000436 | CYRILLIC SMALL LETTER ZHE + D7 | 00000432 | CYRILLIC SMALL LETTER VE + D8 | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + D9 | 0000044B | CYRILLIC SMALL LETTER YERU + DA | 00000437 | CYRILLIC SMALL LETTER ZE + DB | 00000448 | CYRILLIC SMALL LETTER SHA + DC | 0000044D | CYRILLIC SMALL LETTER E + DD | 00000449 | CYRILLIC SMALL LETTER SHCHA + DE | 00000447 | CYRILLIC SMALL LETTER CHE + DF | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + E0 | 0000042E | CYRILLIC CAPITAL LETTER YU + E1 | 00000410 | CYRILLIC CAPITAL LETTER A + E2 | 00000411 | CYRILLIC CAPITAL LETTER BE + E3 | 00000426 | CYRILLIC CAPITAL LETTER TSE + E4 | 00000414 | CYRILLIC CAPITAL LETTER DE + E5 | 00000415 | CYRILLIC CAPITAL LETTER IE + E6 | 00000424 | CYRILLIC CAPITAL LETTER EF + E7 | 00000413 | CYRILLIC CAPITAL LETTER GHE + E8 | 00000425 | CYRILLIC CAPITAL LETTER HA + E9 | 00000418 | CYRILLIC CAPITAL LETTER I + EA | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + EB | 0000041A | CYRILLIC CAPITAL LETTER KA + EC | 0000041B | CYRILLIC CAPITAL LETTER EL + ED | 0000041C | CYRILLIC CAPITAL LETTER EM + EE | 0000041D | CYRILLIC CAPITAL LETTER EN + EF | 0000041E | CYRILLIC CAPITAL LETTER O + F0 | 0000041F | CYRILLIC CAPITAL LETTER PE + F1 | 0000042F | CYRILLIC CAPITAL LETTER YA + F2 | 00000420 | CYRILLIC CAPITAL LETTER ER + F3 | 00000421 | CYRILLIC CAPITAL LETTER ES + F4 | 00000422 | CYRILLIC CAPITAL LETTER TE + F5 | 00000423 | CYRILLIC CAPITAL LETTER U + F6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + F7 | 00000412 | CYRILLIC CAPITAL LETTER VE + F8 | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + F9 | 0000042B | CYRILLIC CAPITAL LETTER YERU + FA | 00000417 | CYRILLIC CAPITAL LETTER ZE + FB | 00000428 | CYRILLIC CAPITAL LETTER SHA + FC | 0000042D | CYRILLIC CAPITAL LETTER E + FD | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + FE | 00000427 | CYRILLIC CAPITAL LETTER CHE + FF | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/KOI8_T.pm b/lib/Locale/RecodeData/KOI8_T.pm new file mode 100644 index 0000000..1d303ae --- /dev/null +++ b/lib/Locale/RecodeData/KOI8_T.pm @@ -0,0 +1,1101 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for KOI8-T. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::KOI8_T; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x049b, + 0x0493, + 0x201a, + 0x0492, + 0x201e, + 0x2026, + 0x2020, + 0x2021, + 0xfffd, + 0x2030, + 0x04b3, + 0x2039, + 0x04b2, + 0x04b7, + 0x04b6, + 0xfffd, + 0x049a, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0xfffd, + 0x2122, + 0xfffd, + 0x203a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x04ef, + 0x04ee, + 0x0451, + 0x00a4, + 0x04e3, + 0x00a6, + 0x00a7, + 0xfffd, + 0xfffd, + 0xfffd, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0xfffd, + 0x00b0, + 0x00b1, + 0x00b2, + 0x0401, + 0xfffd, + 0x04e2, + 0x00b6, + 0x00b7, + 0xfffd, + 0x2116, + 0xfffd, + 0x00bb, + 0xfffd, + 0xfffd, + 0xfffd, + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd2\x9b", + "\xd2\x93", + "\xe2\x80\x9a", + "\xd2\x92", + "\xe2\x80\x9e", + "\xe2\x80\xa6", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xef\xbf\xbd", + "\xe2\x80\xb0", + "\xd2\xb3", + "\xe2\x80\xb9", + "\xd2\xb2", + "\xd2\xb7", + "\xd2\xb6", + "\xef\xbf\xbd", + "\xd2\x9a", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xef\xbf\xbd", + "\xe2\x84\xa2", + "\xef\xbf\xbd", + "\xe2\x80\xba", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd3\xaf", + "\xd3\xae", + "\xd1\x91", + "\xc2\xa4", + "\xd3\xa3", + "\xc2\xa6", + "\xc2\xa7", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xef\xbf\xbd", + "\xc2\xb0", + "\xc2\xb1", + "\xc2\xb2", + "\xd0\x81", + "\xef\xbf\xbd", + "\xd3\xa2", + "\xc2\xb6", + "\xc2\xb7", + "\xef\xbf\xbd", + "\xe2\x84\x96", + "\xef\xbf\xbd", + "\xc2\xbb", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xa9", + "\xd1\x8e", + "\xd0\xb0", + "\xd0\xb1", + "\xd1\x86", + "\xd0\xb4", + "\xd0\xb5", + "\xd1\x84", + "\xd0\xb3", + "\xd1\x85", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x8f", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd0\xb6", + "\xd0\xb2", + "\xd1\x8c", + "\xd1\x8b", + "\xd0\xb7", + "\xd1\x88", + "\xd1\x8d", + "\xd1\x89", + "\xd1\x87", + "\xd1\x8a", + "\xd0\xae", + "\xd0\x90", + "\xd0\x91", + "\xd0\xa6", + "\xd0\x94", + "\xd0\x95", + "\xd0\xa4", + "\xd0\x93", + "\xd0\xa5", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xaf", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\x96", + "\xd0\x92", + "\xd0\xac", + "\xd0\xab", + "\xd0\x97", + "\xd0\xa8", + "\xd0\xad", + "\xd0\xa9", + "\xd0\xa7", + "\xd0\xaa", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a4 => "\xa4", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a9 => "\xbf", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b2 => "\xb2", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000bb => "\xbb", + 0x00000401 => "\xb3", + 0x00000410 => "\xe1", + 0x00000411 => "\xe2", + 0x00000412 => "\xf7", + 0x00000413 => "\xe7", + 0x00000414 => "\xe4", + 0x00000415 => "\xe5", + 0x00000416 => "\xf6", + 0x00000417 => "\xfa", + 0x00000418 => "\xe9", + 0x00000419 => "\xea", + 0x0000041a => "\xeb", + 0x0000041b => "\xec", + 0x0000041c => "\xed", + 0x0000041d => "\xee", + 0x0000041e => "\xef", + 0x0000041f => "\xf0", + 0x00000420 => "\xf2", + 0x00000421 => "\xf3", + 0x00000422 => "\xf4", + 0x00000423 => "\xf5", + 0x00000424 => "\xe6", + 0x00000425 => "\xe8", + 0x00000426 => "\xe3", + 0x00000427 => "\xfe", + 0x00000428 => "\xfb", + 0x00000429 => "\xfd", + 0x0000042a => "\xff", + 0x0000042b => "\xf9", + 0x0000042c => "\xf8", + 0x0000042d => "\xfc", + 0x0000042e => "\xe0", + 0x0000042f => "\xf1", + 0x00000430 => "\xc1", + 0x00000431 => "\xc2", + 0x00000432 => "\xd7", + 0x00000433 => "\xc7", + 0x00000434 => "\xc4", + 0x00000435 => "\xc5", + 0x00000436 => "\xd6", + 0x00000437 => "\xda", + 0x00000438 => "\xc9", + 0x00000439 => "\xca", + 0x0000043a => "\xcb", + 0x0000043b => "\xcc", + 0x0000043c => "\xcd", + 0x0000043d => "\xce", + 0x0000043e => "\xcf", + 0x0000043f => "\xd0", + 0x00000440 => "\xd2", + 0x00000441 => "\xd3", + 0x00000442 => "\xd4", + 0x00000443 => "\xd5", + 0x00000444 => "\xc6", + 0x00000445 => "\xc8", + 0x00000446 => "\xc3", + 0x00000447 => "\xde", + 0x00000448 => "\xdb", + 0x00000449 => "\xdd", + 0x0000044a => "\xdf", + 0x0000044b => "\xd9", + 0x0000044c => "\xd8", + 0x0000044d => "\xdc", + 0x0000044e => "\xc0", + 0x0000044f => "\xd1", + 0x00000451 => "\xa3", + 0x00000492 => "\x83", + 0x00000493 => "\x81", + 0x0000049a => "\x90", + 0x0000049b => "\x80", + 0x000004b2 => "\x8c", + 0x000004b3 => "\x8a", + 0x000004b6 => "\x8e", + 0x000004b7 => "\x8d", + 0x000004e2 => "\xb5", + 0x000004e3 => "\xa5", + 0x000004ee => "\xa2", + 0x000004ef => "\xa1", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201a => "\x82", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x0000201e => "\x84", + 0x00002020 => "\x86", + 0x00002021 => "\x87", + 0x00002022 => "\x95", + 0x00002026 => "\x85", + 0x00002030 => "\x89", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x00002116 => "\xb9", + 0x00002122 => "\x99", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::KOI8_T - Conversion routines for KOI8-T + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for KOI8-T. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + Author: Michael Davis Etajik_fonts@iname.comE + URL: http://www.traveltajikistan.com/fonts + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 0000049B | CYRILLIC SMALL LETTER KA WITH DESCENDER + 81 | 00000493 | CYRILLIC SMALL LETTER GHE WITH STROKE + 82 | 0000201A | SINGLE LOW-9 QUOTATION MARK + 83 | 00000492 | CYRILLIC CAPITAL LETTER GHE WITH STROKE + 84 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + 85 | 00002026 | HORIZONTAL ELLIPSIS + 86 | 00002020 | DAGGER + 87 | 00002021 | DOUBLE DAGGER + 89 | 00002030 | PER MILLE SIGN + 8A | 000004B3 | CYRILLIC SMALL LETTER HA WITH DESCENDER + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 000004B2 | CYRILLIC CAPITAL LETTER HA WITH DESCENDER + 8D | 000004B7 | CYRILLIC SMALL LETTER CHE WITH DESCENDER + 8E | 000004B6 | CYRILLIC CAPITAL LETTER CHE WITH DESCENDER + 90 | 0000049A | CYRILLIC CAPITAL LETTER KA WITH DESCENDER + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 99 | 00002122 | TRADE MARK SIGN + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + A1 | 000004EF | CYRILLIC SMALL LETTER U WITH MACRON + A2 | 000004EE | CYRILLIC CAPITAL LETTER U WITH MACRON + A3 | 00000451 | CYRILLIC SMALL LETTER IO + A4 | 000000A4 | CURRENCY SIGN + A5 | 000004E3 | CYRILLIC SMALL LETTER I WITH MACRON + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000000B2 | SUPERSCRIPT TWO + B3 | 00000401 | CYRILLIC CAPITAL LETTER IE + B5 | 000004E2 | CYRILLIC CAPITAL LETTER I WITH MACRON + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B9 | 00002116 | NUMERO SIGN + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BF | 000000A9 | COPYRIGHT SIGN + C0 | 0000044E | CYRILLIC SMALL LETTER YU + C1 | 00000430 | CYRILLIC SMALL LETTER A + C2 | 00000431 | CYRILLIC SMALL LETTER BE + C3 | 00000446 | CYRILLIC SMALL LETTER TSE + C4 | 00000434 | CYRILLIC SMALL LETTER DE + C5 | 00000435 | CYRILLIC SMALL LETTER IE + C6 | 00000444 | CYRILLIC SMALL LETTER EF + C7 | 00000433 | CYRILLIC SMALL LETTER GHE + C8 | 00000445 | CYRILLIC SMALL LETTER HA + C9 | 00000438 | CYRILLIC SMALL LETTER I + CA | 00000439 | CYRILLIC SMALL LETTER SHORT I + CB | 0000043A | CYRILLIC SMALL LETTER KA + CC | 0000043B | CYRILLIC SMALL LETTER EL + CD | 0000043C | CYRILLIC SMALL LETTER EM + CE | 0000043D | CYRILLIC SMALL LETTER EN + CF | 0000043E | CYRILLIC SMALL LETTER O + D0 | 0000043F | CYRILLIC SMALL LETTER PE + D1 | 0000044F | CYRILLIC SMALL LETTER YA + D2 | 00000440 | CYRILLIC SMALL LETTER ER + D3 | 00000441 | CYRILLIC SMALL LETTER ES + D4 | 00000442 | CYRILLIC SMALL LETTER TE + D5 | 00000443 | CYRILLIC SMALL LETTER U + D6 | 00000436 | CYRILLIC SMALL LETTER ZHE + D7 | 00000432 | CYRILLIC SMALL LETTER VE + D8 | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + D9 | 0000044B | CYRILLIC SMALL LETTER YERU + DA | 00000437 | CYRILLIC SMALL LETTER ZE + DB | 00000448 | CYRILLIC SMALL LETTER SHA + DC | 0000044D | CYRILLIC SMALL LETTER E + DD | 00000449 | CYRILLIC SMALL LETTER SHCHA + DE | 00000447 | CYRILLIC SMALL LETTER CHE + DF | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + E0 | 0000042E | CYRILLIC CAPITAL LETTER YU + E1 | 00000410 | CYRILLIC CAPITAL LETTER A + E2 | 00000411 | CYRILLIC CAPITAL LETTER BE + E3 | 00000426 | CYRILLIC CAPITAL LETTER TSE + E4 | 00000414 | CYRILLIC CAPITAL LETTER DE + E5 | 00000415 | CYRILLIC CAPITAL LETTER IE + E6 | 00000424 | CYRILLIC CAPITAL LETTER EF + E7 | 00000413 | CYRILLIC CAPITAL LETTER GHE + E8 | 00000425 | CYRILLIC CAPITAL LETTER HA + E9 | 00000418 | CYRILLIC CAPITAL LETTER I + EA | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + EB | 0000041A | CYRILLIC CAPITAL LETTER KA + EC | 0000041B | CYRILLIC CAPITAL LETTER EL + ED | 0000041C | CYRILLIC CAPITAL LETTER EM + EE | 0000041D | CYRILLIC CAPITAL LETTER EN + EF | 0000041E | CYRILLIC CAPITAL LETTER O + F0 | 0000041F | CYRILLIC CAPITAL LETTER PE + F1 | 0000042F | CYRILLIC CAPITAL LETTER YA + F2 | 00000420 | CYRILLIC CAPITAL LETTER ER + F3 | 00000421 | CYRILLIC CAPITAL LETTER ES + F4 | 00000422 | CYRILLIC CAPITAL LETTER TE + F5 | 00000423 | CYRILLIC CAPITAL LETTER U + F6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + F7 | 00000412 | CYRILLIC CAPITAL LETTER VE + F8 | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + F9 | 0000042B | CYRILLIC CAPITAL LETTER YERU + FA | 00000417 | CYRILLIC CAPITAL LETTER ZE + FB | 00000428 | CYRILLIC CAPITAL LETTER SHA + FC | 0000042D | CYRILLIC CAPITAL LETTER E + FD | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + FE | 00000427 | CYRILLIC CAPITAL LETTER CHE + FF | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/KOI8_U.pm b/lib/Locale/RecodeData/KOI8_U.pm new file mode 100644 index 0000000..2f32496 --- /dev/null +++ b/lib/Locale/RecodeData/KOI8_U.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for KOI8-U. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::KOI8_U; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x94\x80", + "\xe2\x94\x82", + "\xe2\x94\x8c", + "\xe2\x94\x90", + "\xe2\x94\x94", + "\xe2\x94\x98", + "\xe2\x94\x9c", + "\xe2\x94\xa4", + "\xe2\x94\xac", + "\xe2\x94\xb4", + "\xe2\x94\xbc", + "\xe2\x96\x80", + "\xe2\x96\x84", + "\xe2\x96\x88", + "\xe2\x96\x8c", + "\xe2\x96\x90", + "\xe2\x96\x91", + "\xe2\x96\x92", + "\xe2\x96\x93", + "\xe2\x8c\xa0", + "\xe2\x96\xa0", + "\xe2\x88\x99", + "\xe2\x88\x9a", + "\xe2\x89\x88", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xc2\xa0", + "\xe2\x8c\xa1", + "\xc2\xb0", + "\xc2\xb2", + "\xc2\xb7", + "\xc3\xb7", + "\xe2\x95\x90", + "\xe2\x95\x91", + "\xe2\x95\x92", + "\xd1\x91", + "\xd1\x94", + "\xe2\x95\x94", + "\xd1\x96", + "\xd1\x97", + "\xe2\x95\x97", + "\xe2\x95\x98", + "\xe2\x95\x99", + "\xe2\x95\x9a", + "\xe2\x95\x9b", + "\xd2\x91", + "\xe2\x95\x9d", + "\xe2\x95\x9e", + "\xe2\x95\x9f", + "\xe2\x95\xa0", + "\xe2\x95\xa1", + "\xd0\x81", + "\xd0\x84", + "\xe2\x95\xa3", + "\xd0\x86", + "\xd0\x87", + "\xe2\x95\xa6", + "\xe2\x95\xa7", + "\xe2\x95\xa8", + "\xe2\x95\xa9", + "\xe2\x95\xaa", + "\xd2\x90", + "\xe2\x95\xac", + "\xc2\xa9", + "\xd1\x8e", + "\xd0\xb0", + "\xd0\xb1", + "\xd1\x86", + "\xd0\xb4", + "\xd0\xb5", + "\xd1\x84", + "\xd0\xb3", + "\xd1\x85", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x8f", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd0\xb6", + "\xd0\xb2", + "\xd1\x8c", + "\xd1\x8b", + "\xd0\xb7", + "\xd1\x88", + "\xd1\x8d", + "\xd1\x89", + "\xd1\x87", + "\xd1\x8a", + "\xd0\xae", + "\xd0\x90", + "\xd0\x91", + "\xd0\xa6", + "\xd0\x94", + "\xd0\x95", + "\xd0\xa4", + "\xd0\x93", + "\xd0\xa5", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xaf", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\x96", + "\xd0\x92", + "\xd0\xac", + "\xd0\xab", + "\xd0\x97", + "\xd0\xa8", + "\xd0\xad", + "\xd0\xa9", + "\xd0\xa7", + "\xd0\xaa", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\x9a", + 0x000000a9 => "\xbf", + 0x000000b0 => "\x9c", + 0x000000b2 => "\x9d", + 0x000000b7 => "\x9e", + 0x000000f7 => "\x9f", + 0x00000401 => "\xb3", + 0x00000404 => "\xb4", + 0x00000406 => "\xb6", + 0x00000407 => "\xb7", + 0x00000410 => "\xe1", + 0x00000411 => "\xe2", + 0x00000412 => "\xf7", + 0x00000413 => "\xe7", + 0x00000414 => "\xe4", + 0x00000415 => "\xe5", + 0x00000416 => "\xf6", + 0x00000417 => "\xfa", + 0x00000418 => "\xe9", + 0x00000419 => "\xea", + 0x0000041a => "\xeb", + 0x0000041b => "\xec", + 0x0000041c => "\xed", + 0x0000041d => "\xee", + 0x0000041e => "\xef", + 0x0000041f => "\xf0", + 0x00000420 => "\xf2", + 0x00000421 => "\xf3", + 0x00000422 => "\xf4", + 0x00000423 => "\xf5", + 0x00000424 => "\xe6", + 0x00000425 => "\xe8", + 0x00000426 => "\xe3", + 0x00000427 => "\xfe", + 0x00000428 => "\xfb", + 0x00000429 => "\xfd", + 0x0000042a => "\xff", + 0x0000042b => "\xf9", + 0x0000042c => "\xf8", + 0x0000042d => "\xfc", + 0x0000042e => "\xe0", + 0x0000042f => "\xf1", + 0x00000430 => "\xc1", + 0x00000431 => "\xc2", + 0x00000432 => "\xd7", + 0x00000433 => "\xc7", + 0x00000434 => "\xc4", + 0x00000435 => "\xc5", + 0x00000436 => "\xd6", + 0x00000437 => "\xda", + 0x00000438 => "\xc9", + 0x00000439 => "\xca", + 0x0000043a => "\xcb", + 0x0000043b => "\xcc", + 0x0000043c => "\xcd", + 0x0000043d => "\xce", + 0x0000043e => "\xcf", + 0x0000043f => "\xd0", + 0x00000440 => "\xd2", + 0x00000441 => "\xd3", + 0x00000442 => "\xd4", + 0x00000443 => "\xd5", + 0x00000444 => "\xc6", + 0x00000445 => "\xc8", + 0x00000446 => "\xc3", + 0x00000447 => "\xde", + 0x00000448 => "\xdb", + 0x00000449 => "\xdd", + 0x0000044a => "\xdf", + 0x0000044b => "\xd9", + 0x0000044c => "\xd8", + 0x0000044d => "\xdc", + 0x0000044e => "\xc0", + 0x0000044f => "\xd1", + 0x00000451 => "\xa3", + 0x00000454 => "\xa4", + 0x00000456 => "\xa6", + 0x00000457 => "\xa7", + 0x00000490 => "\xbd", + 0x00000491 => "\xad", + 0x00002219 => "\x95", + 0x0000221a => "\x96", + 0x00002248 => "\x97", + 0x00002264 => "\x98", + 0x00002265 => "\x99", + 0x00002320 => "\x93", + 0x00002321 => "\x9b", + 0x00002500 => "\x80", + 0x00002502 => "\x81", + 0x0000250c => "\x82", + 0x00002510 => "\x83", + 0x00002514 => "\x84", + 0x00002518 => "\x85", + 0x0000251c => "\x86", + 0x00002524 => "\x87", + 0x0000252c => "\x88", + 0x00002534 => "\x89", + 0x0000253c => "\x8a", + 0x00002550 => "\xa0", + 0x00002551 => "\xa1", + 0x00002552 => "\xa2", + 0x00002554 => "\xa5", + 0x00002557 => "\xa8", + 0x00002558 => "\xa9", + 0x00002559 => "\xaa", + 0x0000255a => "\xab", + 0x0000255b => "\xac", + 0x0000255d => "\xae", + 0x0000255e => "\xaf", + 0x0000255f => "\xb0", + 0x00002560 => "\xb1", + 0x00002561 => "\xb2", + 0x00002563 => "\xb5", + 0x00002566 => "\xb8", + 0x00002567 => "\xb9", + 0x00002568 => "\xba", + 0x00002569 => "\xbb", + 0x0000256a => "\xbc", + 0x0000256c => "\xbe", + 0x00002580 => "\x8b", + 0x00002584 => "\x8c", + 0x00002588 => "\x8d", + 0x0000258c => "\x8e", + 0x00002590 => "\x8f", + 0x00002591 => "\x90", + 0x00002592 => "\x91", + 0x00002593 => "\x92", + 0x000025a0 => "\x94", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::KOI8_U - Conversion routines for KOI8-U + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for KOI8-U. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.1 + source: RFC 2319 + source: http://www.net.ua/KOI8-U/ + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00002500 | BOX DRAWINGS LIGHT HORIZONTAL + 81 | 00002502 | BOX DRAWINGS LIGHT VERTICAL + 82 | 0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT + 83 | 00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT + 84 | 00002514 | BOX DRAWINGS LIGHT UP AND RIGHT + 85 | 00002518 | BOX DRAWINGS LIGHT UP AND LEFT + 86 | 0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 87 | 00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT + 88 | 0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 89 | 00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL + 8A | 0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 8B | 00002580 | UPPER HALF BLOCK + 8C | 00002584 | LOWER HALF BLOCK + 8D | 00002588 | FULL BLOCK + 8E | 0000258C | LEFT HALF BLOCK + 8F | 00002590 | RIGHT HALF BLOCK + 90 | 00002591 | LIGHT SHADE + 91 | 00002592 | MEDIUM SHADE + 92 | 00002593 | DARK SHADE + 93 | 00002320 | TOP HALF INTEGRAL + 94 | 000025A0 | BLACK SQUARE + 95 | 00002219 | BULLET OPERATOR + 96 | 0000221A | SQUARE ROOT + 97 | 00002248 | ALMOST EQUAL TO + 98 | 00002264 | LESS THAN OR EQUAL TO + 99 | 00002265 | GREATER THAN OR EQUAL TO + 9A | 000000A0 | NO-BREAK SPACE + 9B | 00002321 | BOTTOM HALF INTEGRAL + 9C | 000000B0 | DEGREE SIGN + 9D | 000000B2 | SUPERSCRIPT DIGIT TWO + 9E | 000000B7 | MIDDLE DOT + 9F | 000000F7 | DIVISION SIGN + A0 | 00002550 | BOX DRAWINGS DOUBLE HORIZONTAL + A1 | 00002551 | BOX DRAWINGS DOUBLE VERTICAL + A2 | 00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + A3 | 00000451 | CYRILLIC SMALL LETTER IO + A4 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + A5 | 00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT + A6 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + A7 | 00000457 | CYRILLIC SMALL LETTER YI (Ukrainian) + A8 | 00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT + A9 | 00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + AA | 00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + AB | 0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT + AC | 0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + AD | 00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN + AE | 0000255D | BOX DRAWINGS DOUBLE UP AND LEFT + AF | 0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + B0 | 0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + B1 | 00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + B2 | 00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + B3 | 00000401 | CYRILLIC CAPITAL LETTER IO + B4 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + B5 | 00002563 | DOUBLE VERTICAL AND LEFT + B6 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + B7 | 00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian) + B8 | 00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + B9 | 00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + BA | 00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + BB | 00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL + BC | 0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + BD | 00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN + BE | 0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + BF | 000000A9 | COPYRIGHT SIGN + C0 | 0000044E | CYRILLIC SMALL LETTER YU + C1 | 00000430 | CYRILLIC SMALL LETTER A + C2 | 00000431 | CYRILLIC SMALL LETTER BE + C3 | 00000446 | CYRILLIC SMALL LETTER TSE + C4 | 00000434 | CYRILLIC SMALL LETTER DE + C5 | 00000435 | CYRILLIC SMALL LETTER IE + C6 | 00000444 | CYRILLIC SMALL LETTER EF + C7 | 00000433 | CYRILLIC SMALL LETTER GHE + C8 | 00000445 | CYRILLIC SMALL LETTER HA + C9 | 00000438 | CYRILLIC SMALL LETTER I + CA | 00000439 | CYRILLIC SMALL LETTER SHORT I + CB | 0000043A | CYRILLIC SMALL LETTER KA + CC | 0000043B | CYRILLIC SMALL LETTER EL + CD | 0000043C | CYRILLIC SMALL LETTER EM + CE | 0000043D | CYRILLIC SMALL LETTER EN + CF | 0000043E | CYRILLIC SMALL LETTER O + D0 | 0000043F | CYRILLIC SMALL LETTER PE + D1 | 0000044F | CYRILLIC SMALL LETTER YA + D2 | 00000440 | CYRILLIC SMALL LETTER ER + D3 | 00000441 | CYRILLIC SMALL LETTER ES + D4 | 00000442 | CYRILLIC SMALL LETTER TE + D5 | 00000443 | CYRILLIC SMALL LETTER U + D6 | 00000436 | CYRILLIC SMALL LETTER ZHE + D7 | 00000432 | CYRILLIC SMALL LETTER VE + D8 | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + D9 | 0000044B | CYRILLIC SMALL LETTER YERU + DA | 00000437 | CYRILLIC SMALL LETTER ZE + DB | 00000448 | CYRILLIC SMALL LETTER SHA + DC | 0000044D | CYRILLIC SMALL LETTER E + DD | 00000449 | CYRILLIC SMALL LETTER SHCHA + DE | 00000447 | CYRILLIC SMALL LETTER CHE + DF | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + E0 | 0000042E | CYRILLIC CAPITAL LETTER YU + E1 | 00000410 | CYRILLIC CAPITAL LETTER A + E2 | 00000411 | CYRILLIC CAPITAL LETTER BE + E3 | 00000426 | CYRILLIC CAPITAL LETTER TSE + E4 | 00000414 | CYRILLIC CAPITAL LETTER DE + E5 | 00000415 | CYRILLIC CAPITAL LETTER IE + E6 | 00000424 | CYRILLIC CAPITAL LETTER EF + E7 | 00000413 | CYRILLIC CAPITAL LETTER GHE + E8 | 00000425 | CYRILLIC CAPITAL LETTER HA + E9 | 00000418 | CYRILLIC CAPITAL LETTER I + EA | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + EB | 0000041A | CYRILLIC CAPITAL LETTER KA + EC | 0000041B | CYRILLIC CAPITAL LETTER EL + ED | 0000041C | CYRILLIC CAPITAL LETTER EM + EE | 0000041D | CYRILLIC CAPITAL LETTER EN + EF | 0000041E | CYRILLIC CAPITAL LETTER O + F0 | 0000041F | CYRILLIC CAPITAL LETTER PE + F1 | 0000042F | CYRILLIC CAPITAL LETTER YA + F2 | 00000420 | CYRILLIC CAPITAL LETTER ER + F3 | 00000421 | CYRILLIC CAPITAL LETTER ES + F4 | 00000422 | CYRILLIC CAPITAL LETTER TE + F5 | 00000423 | CYRILLIC CAPITAL LETTER U + F6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + F7 | 00000412 | CYRILLIC CAPITAL LETTER VE + F8 | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + F9 | 0000042B | CYRILLIC CAPITAL LETTER YERU + FA | 00000417 | CYRILLIC CAPITAL LETTER ZE + FB | 00000428 | CYRILLIC CAPITAL LETTER SHA + FC | 0000042D | CYRILLIC CAPITAL LETTER E + FD | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + FE | 00000427 | CYRILLIC CAPITAL LETTER CHE + FF | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/KOI_8.pm b/lib/Locale/RecodeData/KOI_8.pm new file mode 100644 index 0000000..ac68b88 --- /dev/null +++ b/lib/Locale/RecodeData/KOI_8.pm @@ -0,0 +1,1009 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for KOI-8. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::KOI_8; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 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, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd1\x8e", + "\xd0\xb0", + "\xd0\xb1", + "\xd1\x86", + "\xd0\xb4", + "\xd0\xb5", + "\xd1\x84", + "\xd0\xb3", + "\xd1\x85", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x8f", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd0\xb6", + "\xd0\xb2", + "\xd1\x8c", + "\xd1\x8b", + "\xd0\xb7", + "\xd1\x88", + "\xd1\x8d", + "\xd1\x89", + "\xd1\x87", + "\xd1\x8a", + "\xd0\xae", + "\xd0\x90", + "\xd0\x91", + "\xd0\xa6", + "\xd0\x94", + "\xd0\x95", + "\xd0\xa4", + "\xd0\x93", + "\xd0\xa5", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xaf", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\x96", + "\xd0\x92", + "\xd0\xac", + "\xd0\xab", + "\xd0\x97", + "\xd0\xa8", + "\xd0\xad", + "\xd0\xa9", + "\xd0\xa7", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000410 => "\xe1", + 0x00000411 => "\xe2", + 0x00000412 => "\xf7", + 0x00000413 => "\xe7", + 0x00000414 => "\xe4", + 0x00000415 => "\xe5", + 0x00000416 => "\xf6", + 0x00000417 => "\xfa", + 0x00000418 => "\xe9", + 0x00000419 => "\xea", + 0x0000041a => "\xeb", + 0x0000041b => "\xec", + 0x0000041c => "\xed", + 0x0000041d => "\xee", + 0x0000041e => "\xef", + 0x0000041f => "\xf0", + 0x00000420 => "\xf2", + 0x00000421 => "\xf3", + 0x00000422 => "\xf4", + 0x00000423 => "\xf5", + 0x00000424 => "\xe6", + 0x00000425 => "\xe8", + 0x00000426 => "\xe3", + 0x00000427 => "\xfe", + 0x00000428 => "\xfb", + 0x00000429 => "\xfd", + 0x0000042b => "\xf9", + 0x0000042c => "\xf8", + 0x0000042d => "\xfc", + 0x0000042e => "\xe0", + 0x0000042f => "\xf1", + 0x00000430 => "\xc1", + 0x00000431 => "\xc2", + 0x00000432 => "\xd7", + 0x00000433 => "\xc7", + 0x00000434 => "\xc4", + 0x00000435 => "\xc5", + 0x00000436 => "\xd6", + 0x00000437 => "\xda", + 0x00000438 => "\xc9", + 0x00000439 => "\xca", + 0x0000043a => "\xcb", + 0x0000043b => "\xcc", + 0x0000043c => "\xcd", + 0x0000043d => "\xce", + 0x0000043e => "\xcf", + 0x0000043f => "\xd0", + 0x00000440 => "\xd2", + 0x00000441 => "\xd3", + 0x00000442 => "\xd4", + 0x00000443 => "\xd5", + 0x00000444 => "\xc6", + 0x00000445 => "\xc8", + 0x00000446 => "\xc3", + 0x00000447 => "\xde", + 0x00000448 => "\xdb", + 0x00000449 => "\xdd", + 0x0000044a => "\xdf", + 0x0000044b => "\xd9", + 0x0000044c => "\xd8", + 0x0000044d => "\xdc", + 0x0000044e => "\xc0", + 0x0000044f => "\xd1", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::KOI_8 - Conversion routines for KOI-8 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for KOI-8. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: Andrey A. Chernov Eache@astral.msk.suE + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + C0 | 0000044E | CYRILLIC SMALL LETTER YU + C1 | 00000430 | CYRILLIC SMALL LETTER A + C2 | 00000431 | CYRILLIC SMALL LETTER BE + C3 | 00000446 | CYRILLIC SMALL LETTER TSE + C4 | 00000434 | CYRILLIC SMALL LETTER DE + C5 | 00000435 | CYRILLIC SMALL LETTER IE + C6 | 00000444 | CYRILLIC SMALL LETTER EF + C7 | 00000433 | CYRILLIC SMALL LETTER GHE + C8 | 00000445 | CYRILLIC SMALL LETTER HA + C9 | 00000438 | CYRILLIC SMALL LETTER I + CA | 00000439 | CYRILLIC SMALL LETTER SHORT I + CB | 0000043A | CYRILLIC SMALL LETTER KA + CC | 0000043B | CYRILLIC SMALL LETTER EL + CD | 0000043C | CYRILLIC SMALL LETTER EM + CE | 0000043D | CYRILLIC SMALL LETTER EN + CF | 0000043E | CYRILLIC SMALL LETTER O + D0 | 0000043F | CYRILLIC SMALL LETTER PE + D1 | 0000044F | CYRILLIC SMALL LETTER YA + D2 | 00000440 | CYRILLIC SMALL LETTER ER + D3 | 00000441 | CYRILLIC SMALL LETTER ES + D4 | 00000442 | CYRILLIC SMALL LETTER TE + D5 | 00000443 | CYRILLIC SMALL LETTER U + D6 | 00000436 | CYRILLIC SMALL LETTER ZHE + D7 | 00000432 | CYRILLIC SMALL LETTER VE + D8 | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + D9 | 0000044B | CYRILLIC SMALL LETTER YERU + DA | 00000437 | CYRILLIC SMALL LETTER ZE + DB | 00000448 | CYRILLIC SMALL LETTER SHA + DC | 0000044D | CYRILLIC SMALL LETTER E + DD | 00000449 | CYRILLIC SMALL LETTER SHCHA + DE | 00000447 | CYRILLIC SMALL LETTER CHE + DF | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + E0 | 0000042E | CYRILLIC CAPITAL LETTER YU + E1 | 00000410 | CYRILLIC CAPITAL LETTER A + E2 | 00000411 | CYRILLIC CAPITAL LETTER BE + E3 | 00000426 | CYRILLIC CAPITAL LETTER TSE + E4 | 00000414 | CYRILLIC CAPITAL LETTER DE + E5 | 00000415 | CYRILLIC CAPITAL LETTER IE + E6 | 00000424 | CYRILLIC CAPITAL LETTER EF + E7 | 00000413 | CYRILLIC CAPITAL LETTER GHE + E8 | 00000425 | CYRILLIC CAPITAL LETTER HA + E9 | 00000418 | CYRILLIC CAPITAL LETTER I + EA | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + EB | 0000041A | CYRILLIC CAPITAL LETTER KA + EC | 0000041B | CYRILLIC CAPITAL LETTER EL + ED | 0000041C | CYRILLIC CAPITAL LETTER EM + EE | 0000041D | CYRILLIC CAPITAL LETTER EN + EF | 0000041E | CYRILLIC CAPITAL LETTER O + F0 | 0000041F | CYRILLIC CAPITAL LETTER PE + F1 | 0000042F | CYRILLIC CAPITAL LETTER YA + F2 | 00000420 | CYRILLIC CAPITAL LETTER ER + F3 | 00000421 | CYRILLIC CAPITAL LETTER ES + F4 | 00000422 | CYRILLIC CAPITAL LETTER TE + F5 | 00000423 | CYRILLIC CAPITAL LETTER U + F6 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + F7 | 00000412 | CYRILLIC CAPITAL LETTER VE + F8 | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + F9 | 0000042B | CYRILLIC CAPITAL LETTER YERU + FA | 00000417 | CYRILLIC CAPITAL LETTER ZE + FB | 00000428 | CYRILLIC CAPITAL LETTER SHA + FC | 0000042D | CYRILLIC CAPITAL LETTER E + FD | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + FE | 00000427 | CYRILLIC CAPITAL LETTER CHE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/LATIN_GREEK.pm b/lib/Locale/RecodeData/LATIN_GREEK.pm new file mode 100644 index 0000000..4a4ee18 --- /dev/null +++ b/lib/Locale/RecodeData/LATIN_GREEK.pm @@ -0,0 +1,882 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for LATIN-GREEK. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::LATIN_GREEK; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00a3, + 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, + 0x0391, + 0x0392, + 0x03a8, + 0x0394, + 0x0395, + 0x03a6, + 0x0393, + 0x0397, + 0x0399, + 0x039e, + 0x039a, + 0x039b, + 0x039c, + 0x039d, + 0x039f, + 0x03a0, + 0xfffd, + 0x03a1, + 0x03a3, + 0x03a4, + 0x0398, + 0x03a9, + 0x00b7, + 0x03a7, + 0x03a5, + 0x0396, + 0x007b, + 0x007c, + 0x007d, + 0x00a8, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\xc2\xa3", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\xce\x91", + "\xce\x92", + "\xce\xa8", + "\xce\x94", + "\xce\x95", + "\xce\xa6", + "\xce\x93", + "\xce\x97", + "\xce\x99", + "\xce\x9e", + "\xce\x9a", + "\xce\x9b", + "\xce\x9c", + "\xce\x9d", + "\xce\x9f", + "\xce\xa0", + "\xef\xbf\xbd", + "\xce\xa1", + "\xce\xa3", + "\xce\xa4", + "\xce\x98", + "\xce\xa9", + "\xc2\xb7", + "\xce\xa7", + "\xce\xa5", + "\xce\x96", + "\x7b", + "\x7c", + "\x7d", + "\xc2\xa8", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007f => "\x7f", + 0x000000a3 => "\x23", + 0x000000a8 => "\x7e", + 0x000000b7 => "\x77", + 0x00000391 => "\x61", + 0x00000392 => "\x62", + 0x00000393 => "\x67", + 0x00000394 => "\x64", + 0x00000395 => "\x65", + 0x00000396 => "\x7a", + 0x00000397 => "\x68", + 0x00000398 => "\x75", + 0x00000399 => "\x69", + 0x0000039a => "\x6b", + 0x0000039b => "\x6c", + 0x0000039c => "\x6d", + 0x0000039d => "\x6e", + 0x0000039e => "\x6a", + 0x0000039f => "\x6f", + 0x000003a0 => "\x70", + 0x000003a1 => "\x72", + 0x000003a3 => "\x73", + 0x000003a4 => "\x74", + 0x000003a5 => "\x79", + 0x000003a6 => "\x66", + 0x000003a7 => "\x78", + 0x000003a8 => "\x63", + 0x000003a9 => "\x76", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::LATIN_GREEK - Conversion routines for LATIN_GREEK + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for LATIN-GREEK. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-19 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 000000A3 | POUND SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000391 | GREEK CAPITAL LETTER ALPHA + 62 | 00000392 | GREEK CAPITAL LETTER BETA + 63 | 000003A8 | GREEK CAPITAL LETTER PSI + 64 | 00000394 | GREEK CAPITAL LETTER DELTA + 65 | 00000395 | GREEK CAPITAL LETTER EPSILON + 66 | 000003A6 | GREEK CAPITAL LETTER PHI + 67 | 00000393 | GREEK CAPITAL LETTER GAMMA + 68 | 00000397 | GREEK CAPITAL LETTER ETA + 69 | 00000399 | GREEK CAPITAL LETTER IOTA + 6A | 0000039E | GREEK CAPITAL LETTER XI + 6B | 0000039A | GREEK CAPITAL LETTER KAPPA + 6C | 0000039B | GREEK CAPITAL LETTER LAMDA + 6D | 0000039C | GREEK CAPITAL LETTER MU + 6E | 0000039D | GREEK CAPITAL LETTER NU + 6F | 0000039F | GREEK CAPITAL LETTER OMICRON + 70 | 000003A0 | GREEK CAPITAL LETTER PI + 72 | 000003A1 | GREEK CAPITAL LETTER RHO + 73 | 000003A3 | GREEK CAPITAL LETTER SIGMA + 74 | 000003A4 | GREEK CAPITAL LETTER TAU + 75 | 00000398 | GREEK CAPITAL LETTER THETA + 76 | 000003A9 | GREEK CAPITAL LETTER OMEGA + 77 | 000000B7 | MIDDLE DOT + 78 | 000003A7 | GREEK CAPITAL LETTER CHI + 79 | 000003A5 | GREEK CAPITAL LETTER UPSILON + 7A | 00000396 | GREEK CAPITAL LETTER ZETA + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 000000A8 | DIAERESIS + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/LATIN_GREEK_1.pm b/lib/Locale/RecodeData/LATIN_GREEK_1.pm new file mode 100644 index 0000000..7354feb --- /dev/null +++ b/lib/Locale/RecodeData/LATIN_GREEK_1.pm @@ -0,0 +1,884 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for LATIN-GREEK-1. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::LATIN_GREEK_1; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x039e, + 0x0022, + 0x0393, + 0x00a4, + 0x0025, + 0x0026, + 0x0027, + 0x0028, + 0x0029, + 0x002a, + 0x002b, + 0x002c, + 0x002d, + 0x002e, + 0x002f, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x03a8, + 0x003b, + 0x003c, + 0x003d, + 0x003e, + 0x03a0, + 0x0394, + 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, + 0x03a9, + 0x0398, + 0x03a6, + 0x039b, + 0x03a3, + 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, + 0x203e, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\xce\x9e", + "\x22", + "\xce\x93", + "\xc2\xa4", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\xce\xa8", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\xce\xa0", + "\xce\x94", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xce\xa9", + "\xce\x98", + "\xce\xa6", + "\xce\x9b", + "\xce\xa3", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\xe2\x80\xbe", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000022 => "\x22", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007f => "\x7f", + 0x000000a4 => "\x24", + 0x00000393 => "\x23", + 0x00000394 => "\x40", + 0x00000398 => "\x5c", + 0x0000039b => "\x5e", + 0x0000039e => "\x21", + 0x000003a0 => "\x3f", + 0x000003a3 => "\x5f", + 0x000003a6 => "\x5d", + 0x000003a8 => "\x3a", + 0x000003a9 => "\x5b", + 0x0000203e => "\x7e", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::LATIN_GREEK_1 - Conversion routines for LATIN_GREEK_1 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for LATIN-GREEK-1. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-27 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 0000039E | GREEK CAPITAL LETTER XI + 22 | 00000022 | QUOTATION MARK + 23 | 00000393 | GREEK CAPITAL LETTER GAMMA + 24 | 000000A4 | CURRENCY SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 000003A8 | GREEK CAPITAL LETTER PSI + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 000003A0 | GREEK CAPITAL LETTER PI + 40 | 00000394 | GREEK CAPITAL LETTER DELTA + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 000003A9 | GREEK CAPITAL LETTER OMEGA + 5C | 00000398 | GREEK CAPITAL LETTER THETA + 5D | 000003A6 | GREEK CAPITAL LETTER PHI + 5E | 0000039B | GREEK CAPITAL LETTER LAMDA + 5F | 000003A3 | GREEK CAPITAL LETTER SIGMA + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000203E | OVERLINE + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACARABIC.pm b/lib/Locale/RecodeData/MACARABIC.pm new file mode 100644 index 0000000..1308ee4 --- /dev/null +++ b/lib/Locale/RecodeData/MACARABIC.pm @@ -0,0 +1,1088 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACARABIC. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACARABIC; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0x00a0, + 0x00c7, + 0x00c9, + 0x00d1, + 0x00d6, + 0x00dc, + 0x00e1, + 0x00e0, + 0x00e2, + 0x00e4, + 0x06ba, + 0x00ab, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00ed, + 0x2026, + 0x00ee, + 0x00ef, + 0x00f1, + 0x00f3, + 0x00bb, + 0x00f4, + 0x00f6, + 0x00f7, + 0x00fa, + 0x00f9, + 0x00fb, + 0x00fc, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x066a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x060c, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0660, + 0x0661, + 0x0662, + 0x0663, + 0x0664, + 0x0665, + 0x0666, + 0x0667, + 0x0668, + 0x0669, + 0xfffd, + 0x061b, + 0xfffd, + 0xfffd, + 0xfffd, + 0x061f, + 0x066d, + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0640, + 0x0641, + 0x0642, + 0x0643, + 0x0644, + 0x0645, + 0x0646, + 0x0647, + 0x0648, + 0x0649, + 0x064a, + 0x064b, + 0x064c, + 0x064d, + 0x064e, + 0x064f, + 0x0650, + 0x0651, + 0x0652, + 0x067e, + 0x0679, + 0x0686, + 0x06d5, + 0x06a4, + 0x06af, + 0x0688, + 0x0691, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0698, + 0x06d2, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xc2\xa0", + "\xc3\x87", + "\xc3\x89", + "\xc3\x91", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xa1", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xda\xba", + "\xc2\xab", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xad", + "\xe2\x80\xa6", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb1", + "\xc3\xb3", + "\xc2\xbb", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xba", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd9\xaa", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\x8c", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd9\xa0", + "\xd9\xa1", + "\xd9\xa2", + "\xd9\xa3", + "\xd9\xa4", + "\xd9\xa5", + "\xd9\xa6", + "\xd9\xa7", + "\xd9\xa8", + "\xd9\xa9", + "\xef\xbf\xbd", + "\xd8\x9b", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd8\x9f", + "\xd9\xad", + "\xd8\xa1", + "\xd8\xa2", + "\xd8\xa3", + "\xd8\xa4", + "\xd8\xa5", + "\xd8\xa6", + "\xd8\xa7", + "\xd8\xa8", + "\xd8\xa9", + "\xd8\xaa", + "\xd8\xab", + "\xd8\xac", + "\xd8\xad", + "\xd8\xae", + "\xd8\xaf", + "\xd8\xb0", + "\xd8\xb1", + "\xd8\xb2", + "\xd8\xb3", + "\xd8\xb4", + "\xd8\xb5", + "\xd8\xb6", + "\xd8\xb7", + "\xd8\xb8", + "\xd8\xb9", + "\xd8\xba", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd9\x80", + "\xd9\x81", + "\xd9\x82", + "\xd9\x83", + "\xd9\x84", + "\xd9\x85", + "\xd9\x86", + "\xd9\x87", + "\xd9\x88", + "\xd9\x89", + "\xd9\x8a", + "\xd9\x8b", + "\xd9\x8c", + "\xd9\x8d", + "\xd9\x8e", + "\xd9\x8f", + "\xd9\x90", + "\xd9\x91", + "\xd9\x92", + "\xd9\xbe", + "\xd9\xb9", + "\xda\x86", + "\xdb\x95", + "\xda\xa4", + "\xda\xaf", + "\xda\x88", + "\xda\x91", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xda\x98", + "\xdb\x92", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\x81", + 0x000000ab => "\x8c", + 0x000000bb => "\x98", + 0x000000c4 => "\x80", + 0x000000c7 => "\x82", + 0x000000c9 => "\x83", + 0x000000d1 => "\x84", + 0x000000d6 => "\x85", + 0x000000dc => "\x86", + 0x000000e0 => "\x88", + 0x000000e1 => "\x87", + 0x000000e2 => "\x89", + 0x000000e4 => "\x8a", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ed => "\x92", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f1 => "\x96", + 0x000000f3 => "\x97", + 0x000000f4 => "\x99", + 0x000000f6 => "\x9a", + 0x000000f7 => "\x9b", + 0x000000f9 => "\x9d", + 0x000000fa => "\x9c", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x0000060c => "\xac", + 0x0000061b => "\xbb", + 0x0000061f => "\xbf", + 0x00000621 => "\xc1", + 0x00000622 => "\xc2", + 0x00000623 => "\xc3", + 0x00000624 => "\xc4", + 0x00000625 => "\xc5", + 0x00000626 => "\xc6", + 0x00000627 => "\xc7", + 0x00000628 => "\xc8", + 0x00000629 => "\xc9", + 0x0000062a => "\xca", + 0x0000062b => "\xcb", + 0x0000062c => "\xcc", + 0x0000062d => "\xcd", + 0x0000062e => "\xce", + 0x0000062f => "\xcf", + 0x00000630 => "\xd0", + 0x00000631 => "\xd1", + 0x00000632 => "\xd2", + 0x00000633 => "\xd3", + 0x00000634 => "\xd4", + 0x00000635 => "\xd5", + 0x00000636 => "\xd6", + 0x00000637 => "\xd7", + 0x00000638 => "\xd8", + 0x00000639 => "\xd9", + 0x0000063a => "\xda", + 0x00000640 => "\xe0", + 0x00000641 => "\xe1", + 0x00000642 => "\xe2", + 0x00000643 => "\xe3", + 0x00000644 => "\xe4", + 0x00000645 => "\xe5", + 0x00000646 => "\xe6", + 0x00000647 => "\xe7", + 0x00000648 => "\xe8", + 0x00000649 => "\xe9", + 0x0000064a => "\xea", + 0x0000064b => "\xeb", + 0x0000064c => "\xec", + 0x0000064d => "\xed", + 0x0000064e => "\xee", + 0x0000064f => "\xef", + 0x00000650 => "\xf0", + 0x00000651 => "\xf1", + 0x00000652 => "\xf2", + 0x00000660 => "\xb0", + 0x00000661 => "\xb1", + 0x00000662 => "\xb2", + 0x00000663 => "\xb3", + 0x00000664 => "\xb4", + 0x00000665 => "\xb5", + 0x00000666 => "\xb6", + 0x00000667 => "\xb7", + 0x00000668 => "\xb8", + 0x00000669 => "\xb9", + 0x0000066a => "\xa5", + 0x0000066d => "\xc0", + 0x00000679 => "\xf4", + 0x0000067e => "\xf3", + 0x00000686 => "\xf5", + 0x00000688 => "\xf9", + 0x00000691 => "\xfa", + 0x00000698 => "\xfe", + 0x000006a4 => "\xf7", + 0x000006af => "\xf8", + 0x000006ba => "\x8b", + 0x000006d2 => "\xff", + 0x000006d5 => "\xf6", + 0x00002026 => "\x93", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACARABIC - Conversion routines for MACARABIC + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACARABIC. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 000000A0 | NO-BREAK SPACE + 82 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 000006BA | ARABIC LETTER NOON GHUNNA + 8C | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 93 | 00002026 | HORIZONTAL ELLIPSIS + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 97 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + 98 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000F7 | DIVISION SIGN + 9C | 000000FA | LATIN SMALL LETTER U WITH ACUTE + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A5 | 0000066A | ARABIC PERCENT SIGN + AC | 0000060C | ARABIC COMMA + B0 | 00000660 | ARABIC-INDIC DIGIT ZERO + B1 | 00000661 | ARABIC-INDIC DIGIT ONE + B2 | 00000662 | ARABIC-INDIC DIGIT TWO + B3 | 00000663 | ARABIC-INDIC DIGIT THREE + B4 | 00000664 | ARABIC-INDIC DIGIT FOUR + B5 | 00000665 | ARABIC-INDIC DIGIT FIVE + B6 | 00000666 | ARABIC-INDIC DIGIT SIX + B7 | 00000667 | ARABIC-INDIC DIGIT SEVEN + B8 | 00000668 | ARABIC-INDIC DIGIT EIGHT + B9 | 00000669 | ARABIC-INDIC DIGIT NINE + BB | 0000061B | ARABIC SEMICOLON + BF | 0000061F | ARABIC QUESTION MARK + C0 | 0000066D | ARABIC FIVE POINTED STAR + C1 | 00000621 | ARABIC LETTER HAMZA + C2 | 00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE + C3 | 00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE + C4 | 00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE + C5 | 00000625 | ARABIC LETTER ALEF WITH HAMZA BELOW + C6 | 00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE + C7 | 00000627 | ARABIC LETTER ALEF + C8 | 00000628 | ARABIC LETTER BEH + C9 | 00000629 | ARABIC LETTER TEH MARBUTA + CA | 0000062A | ARABIC LETTER TEH + CB | 0000062B | ARABIC LETTER THEH + CC | 0000062C | ARABIC LETTER JEEM + CD | 0000062D | ARABIC LETTER HAH + CE | 0000062E | ARABIC LETTER KHAH + CF | 0000062F | ARABIC LETTER DAL + D0 | 00000630 | ARABIC LETTER THAL + D1 | 00000631 | ARABIC LETTER REH + D2 | 00000632 | ARABIC LETTER ZAIN + D3 | 00000633 | ARABIC LETTER SEEN + D4 | 00000634 | ARABIC LETTER SHEEN + D5 | 00000635 | ARABIC LETTER SAD + D6 | 00000636 | ARABIC LETTER DAD + D7 | 00000637 | ARABIC LETTER TAH + D8 | 00000638 | ARABIC LETTER ZAH + D9 | 00000639 | ARABIC LETTER AIN + DA | 0000063A | ARABIC LETTER GHAIN + E0 | 00000640 | ARABIC TATWEEL + E1 | 00000641 | ARABIC LETTER FEH + E2 | 00000642 | ARABIC LETTER QAF + E3 | 00000643 | ARABIC LETTER KAF + E4 | 00000644 | ARABIC LETTER LAM + E5 | 00000645 | ARABIC LETTER MEEM + E6 | 00000646 | ARABIC LETTER NOON + E7 | 00000647 | ARABIC LETTER HEH + E8 | 00000648 | ARABIC LETTER WAW + E9 | 00000649 | ARABIC LETTER ALEF MAKSURA + EA | 0000064A | ARABIC LETTER YEH + EB | 0000064B | ARABIC FATHATAN + EC | 0000064C | ARABIC DAMMATAN + ED | 0000064D | ARABIC KASRATAN + EE | 0000064E | ARABIC FATHA + EF | 0000064F | ARABIC DAMMA + F0 | 00000650 | ARABIC KASRA + F1 | 00000651 | ARABIC SHADDA + F2 | 00000652 | ARABIC SUKUN + F3 | 0000067E | ARABIC LETTER PEH + F4 | 00000679 | ARABIC LETTER TTEH + F5 | 00000686 | ARABIC LETTER TCHEH + F6 | 000006D5 | ARABIC LETTER AE + F7 | 000006A4 | ARABIC LETTER VEH + F8 | 000006AF | ARABIC LETTER GAF + F9 | 00000688 | ARABIC LETTER DDAL + FA | 00000691 | ARABIC LETTER RREH + FE | 00000698 | ARABIC LETTER JEH + FF | 000006D2 | ARABIC LETTER YEH BARREE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACCROATIAN.pm b/lib/Locale/RecodeData/MACCROATIAN.pm new file mode 100644 index 0000000..bd4745c --- /dev/null +++ b/lib/Locale/RecodeData/MACCROATIAN.pm @@ -0,0 +1,1138 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACCROATIAN. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACCROATIAN; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0x00c5, + 0x00c7, + 0x00c9, + 0x00d1, + 0x00d6, + 0x00dc, + 0x00e1, + 0x00e0, + 0x00e2, + 0x00e4, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00ed, + 0x00ec, + 0x00ee, + 0x00ef, + 0x00f1, + 0x00f3, + 0x00f2, + 0x00f4, + 0x00f6, + 0x00f5, + 0x00fa, + 0x00f9, + 0x00fb, + 0x00fc, + 0x2020, + 0x00b0, + 0x00a2, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x00df, + 0x00ae, + 0x0160, + 0x2122, + 0x00b4, + 0x00a8, + 0x2260, + 0x017d, + 0x00d8, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x2206, + 0x00b5, + 0x2202, + 0x2211, + 0x220f, + 0x0161, + 0x222b, + 0x00aa, + 0x00ba, + 0x2126, + 0x017e, + 0x00f8, + 0x00bf, + 0x00a1, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x0106, + 0x00ab, + 0x010c, + 0x2026, + 0x00a0, + 0x00c0, + 0x00c3, + 0x00d5, + 0x0152, + 0x0153, + 0x0110, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x25ca, + 0xfffd, + 0x00a9, + 0x2044, + 0x00a4, + 0x2039, + 0x203a, + 0x00c6, + 0x00bb, + 0x2013, + 0x00b7, + 0x201a, + 0x201e, + 0x2030, + 0x00c2, + 0x0107, + 0x00c1, + 0x010d, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00d3, + 0x00d4, + 0x0111, + 0x00d2, + 0x00da, + 0x00db, + 0x00d9, + 0x0131, + 0x02c6, + 0x02dc, + 0x00af, + 0x03c0, + 0x00cb, + 0x02da, + 0x00b8, + 0x00ca, + 0x00e6, + 0x02c7, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xc3\x85", + "\xc3\x87", + "\xc3\x89", + "\xc3\x91", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xa1", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xad", + "\xc3\xac", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb1", + "\xc3\xb3", + "\xc3\xb2", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb5", + "\xc3\xba", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xe2\x80\xa0", + "\xc2\xb0", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xc3\x9f", + "\xc2\xae", + "\xc5\xa0", + "\xe2\x84\xa2", + "\xc2\xb4", + "\xc2\xa8", + "\xe2\x89\xa0", + "\xc5\xbd", + "\xc3\x98", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xe2\x88\x86", + "\xc2\xb5", + "\xe2\x88\x82", + "\xe2\x88\x91", + "\xe2\x88\x8f", + "\xc5\xa1", + "\xe2\x88\xab", + "\xc2\xaa", + "\xc2\xba", + "\xe2\x84\xa6", + "\xc5\xbe", + "\xc3\xb8", + "\xc2\xbf", + "\xc2\xa1", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xc4\x86", + "\xc2\xab", + "\xc4\x8c", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xc3\x80", + "\xc3\x83", + "\xc3\x95", + "\xc5\x92", + "\xc5\x93", + "\xc4\x90", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x97\x8a", + "\xef\xbf\xbd", + "\xc2\xa9", + "\xe2\x81\x84", + "\xc2\xa4", + "\xe2\x80\xb9", + "\xe2\x80\xba", + "\xc3\x86", + "\xc2\xbb", + "\xe2\x80\x93", + "\xc2\xb7", + "\xe2\x80\x9a", + "\xe2\x80\x9e", + "\xe2\x80\xb0", + "\xc3\x82", + "\xc4\x87", + "\xc3\x81", + "\xc4\x8d", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\x93", + "\xc3\x94", + "\xc4\x91", + "\xc3\x92", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x99", + "\xc4\xb1", + "\xcb\x86", + "\xcb\x9c", + "\xc2\xaf", + "\xcf\x80", + "\xc3\x8b", + "\xcb\x9a", + "\xc2\xb8", + "\xc3\x8a", + "\xc3\xa6", + "\xcb\x87", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a1 => "\xc1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xdb", + 0x000000a7 => "\xa4", + 0x000000a8 => "\xac", + 0x000000a9 => "\xd9", + 0x000000aa => "\xbb", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000af => "\xf8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b4 => "\xab", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000b7 => "\xe1", + 0x000000b8 => "\xfc", + 0x000000ba => "\xbc", + 0x000000bb => "\xdf", + 0x000000bf => "\xc0", + 0x000000c0 => "\xcb", + 0x000000c1 => "\xe7", + 0x000000c2 => "\xe5", + 0x000000c3 => "\xcc", + 0x000000c4 => "\x80", + 0x000000c5 => "\x81", + 0x000000c6 => "\xde", + 0x000000c7 => "\x82", + 0x000000c8 => "\xe9", + 0x000000c9 => "\x83", + 0x000000ca => "\xfd", + 0x000000cb => "\xfa", + 0x000000cc => "\xed", + 0x000000cd => "\xea", + 0x000000ce => "\xeb", + 0x000000cf => "\xec", + 0x000000d1 => "\x84", + 0x000000d2 => "\xf1", + 0x000000d3 => "\xee", + 0x000000d4 => "\xef", + 0x000000d5 => "\xcd", + 0x000000d6 => "\x85", + 0x000000d8 => "\xaf", + 0x000000d9 => "\xf4", + 0x000000da => "\xf2", + 0x000000db => "\xf3", + 0x000000dc => "\x86", + 0x000000df => "\xa7", + 0x000000e0 => "\x88", + 0x000000e1 => "\x87", + 0x000000e2 => "\x89", + 0x000000e3 => "\x8b", + 0x000000e4 => "\x8a", + 0x000000e5 => "\x8c", + 0x000000e6 => "\xfe", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ec => "\x93", + 0x000000ed => "\x92", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f1 => "\x96", + 0x000000f2 => "\x98", + 0x000000f3 => "\x97", + 0x000000f4 => "\x99", + 0x000000f5 => "\x9b", + 0x000000f6 => "\x9a", + 0x000000f7 => "\xd6", + 0x000000f8 => "\xbf", + 0x000000f9 => "\x9d", + 0x000000fa => "\x9c", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x00000106 => "\xc6", + 0x00000107 => "\xe6", + 0x0000010c => "\xc8", + 0x0000010d => "\xe8", + 0x00000110 => "\xd0", + 0x00000111 => "\xf0", + 0x00000131 => "\xf5", + 0x00000152 => "\xce", + 0x00000153 => "\xcf", + 0x00000160 => "\xa9", + 0x00000161 => "\xb9", + 0x0000017d => "\xae", + 0x0000017e => "\xbe", + 0x00000192 => "\xc4", + 0x000002c6 => "\xf6", + 0x000002c7 => "\xff", + 0x000002da => "\xfb", + 0x000002dc => "\xf7", + 0x000003c0 => "\xf9", + 0x00002013 => "\xe0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201a => "\xe2", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xe3", + 0x00002020 => "\xa0", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002030 => "\xe4", + 0x00002039 => "\xdc", + 0x0000203a => "\xdd", + 0x00002044 => "\xda", + 0x00002122 => "\xaa", + 0x00002126 => "\xbd", + 0x00002202 => "\xb6", + 0x00002206 => "\xb4", + 0x0000220f => "\xb8", + 0x00002211 => "\xb7", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x0000222b => "\xba", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", + 0x000025ca => "\xd7", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACCROATIAN - Conversion routines for MACCROATIAN + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACCROATIAN. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 82 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 8C | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 93 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 97 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + 98 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 9C | 000000FA | LATIN SMALL LETTER U WITH ACUTE + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A0 | 00002020 | DAGGER + A1 | 000000B0 | DEGREE SIGN + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 000000DF | LATIN SMALL LETTER SHARP S + A8 | 000000AE | REGISTERED SIGN + A9 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + AA | 00002122 | TRADE MARK SIGN + AB | 000000B4 | ACUTE ACCENT + AC | 000000A8 | DIAERESIS + AD | 00002260 | NOT EQUAL TO + AE | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + AF | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 00002206 | INCREMENT + B5 | 000000B5 | MICRO SIGN + B6 | 00002202 | PARTIAL DIFFERENTIAL + B7 | 00002211 | N-ARY SUMMATION + B8 | 0000220F | N-ARY PRODUCT + B9 | 00000161 | LATIN SMALL LETTER S WITH CARON + BA | 0000222B | INTEGRAL + BB | 000000AA | FEMININE ORDINAL INDICATOR + BC | 000000BA | MASCULINE ORDINAL INDICATOR + BD | 00002126 | OHM SIGN + BE | 0000017E | LATIN SMALL LETTER Z WITH CARON + BF | 000000F8 | LATIN SMALL LETTER O WITH STROKE + C0 | 000000BF | INVERTED QUESTION MARK + C1 | 000000A1 | INVERTED EXCLAMATION MARK + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00000106 | LATIN CAPITAL LETTER C WITH ACUTE + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + CC | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + CD | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + CE | 00000152 | LATIN CAPITAL LIGATURE OE + CF | 00000153 | LATIN SMALL LIGATURE OE + D0 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 000025CA | LOZENGE + D9 | 000000A9 | COPYRIGHT SIGN + DA | 00002044 | FRACTION SLASH + DB | 000000A4 | CURRENCY SIGN + DC | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + DD | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + DE | 000000C6 | LATIN CAPITAL LETTER AE + DF | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + E0 | 00002013 | EN DASH + E1 | 000000B7 | MIDDLE DOT + E2 | 0000201A | SINGLE LOW-9 QUOTATION MARK + E3 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + E4 | 00002030 | PER MILLE SIGN + E5 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + E6 | 00000107 | LATIN SMALL LETTER C WITH ACUTE + E7 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + E8 | 0000010D | LATIN SMALL LETTER C WITH CARON + E9 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + EA | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + EB | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + EC | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + ED | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + F0 | 00000111 | LATIN SMALL LETTER D WITH STROKE + F1 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + F2 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + F3 | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + F4 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + F5 | 00000131 | LATIN SMALL LETTER DOTLESS I + F6 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + F7 | 000002DC | SMALL TILDE + F8 | 000000AF | MACRON + F9 | 000003C0 | GREEK SMALL LETTER PI + FA | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + FB | 000002DA | RING ABOVE + FC | 000000B8 | CEDILLA + FD | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + FE | 000000E6 | LATIN SMALL LETTER AE + FF | 000002C7 | CARON + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACCYRILLIC.pm b/lib/Locale/RecodeData/MACCYRILLIC.pm new file mode 100644 index 0000000..185417e --- /dev/null +++ b/lib/Locale/RecodeData/MACCYRILLIC.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACCYRILLIC. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACCYRILLIC; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x2020, + 0x00b0, + 0x00a2, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x0406, + 0x00ae, + 0x00a9, + 0x2122, + 0x0402, + 0x0452, + 0x2260, + 0x0403, + 0x0453, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x0456, + 0x00b5, + 0x2202, + 0x0408, + 0x0404, + 0x0454, + 0x0407, + 0x0457, + 0x0409, + 0x0459, + 0x040a, + 0x045a, + 0x0458, + 0x0405, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x2206, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x040b, + 0x045b, + 0x040c, + 0x045c, + 0x0455, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x201e, + 0x040e, + 0x045e, + 0x040f, + 0x045f, + 0x2116, + 0x0401, + 0x0451, + 0x044f, + 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, + 0x00a4, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd0\x90", + "\xd0\x91", + "\xd0\x92", + "\xd0\x93", + "\xd0\x94", + "\xd0\x95", + "\xd0\x96", + "\xd0\x97", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\xa4", + "\xd0\xa5", + "\xd0\xa6", + "\xd0\xa7", + "\xd0\xa8", + "\xd0\xa9", + "\xd0\xaa", + "\xd0\xab", + "\xd0\xac", + "\xd0\xad", + "\xd0\xae", + "\xd0\xaf", + "\xe2\x80\xa0", + "\xc2\xb0", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xd0\x86", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xd0\x82", + "\xd1\x92", + "\xe2\x89\xa0", + "\xd0\x83", + "\xd1\x93", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xd1\x96", + "\xc2\xb5", + "\xe2\x88\x82", + "\xd0\x88", + "\xd0\x84", + "\xd1\x94", + "\xd0\x87", + "\xd1\x97", + "\xd0\x89", + "\xd1\x99", + "\xd0\x8a", + "\xd1\x9a", + "\xd1\x98", + "\xd0\x85", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xe2\x88\x86", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xd0\x8b", + "\xd1\x9b", + "\xd0\x8c", + "\xd1\x9c", + "\xd1\x95", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x80\x9e", + "\xd0\x8e", + "\xd1\x9e", + "\xd0\x8f", + "\xd1\x9f", + "\xe2\x84\x96", + "\xd0\x81", + "\xd1\x91", + "\xd1\x8f", + "\xd0\xb0", + "\xd0\xb1", + "\xd0\xb2", + "\xd0\xb3", + "\xd0\xb4", + "\xd0\xb5", + "\xd0\xb6", + "\xd0\xb7", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd1\x84", + "\xd1\x85", + "\xd1\x86", + "\xd1\x87", + "\xd1\x88", + "\xd1\x89", + "\xd1\x8a", + "\xd1\x8b", + "\xd1\x8c", + "\xd1\x8d", + "\xd1\x8e", + "\xc2\xa4", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xff", + 0x000000a7 => "\xa4", + 0x000000a9 => "\xa9", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000bb => "\xc8", + 0x000000f7 => "\xd6", + 0x00000192 => "\xc4", + 0x00000401 => "\xdd", + 0x00000402 => "\xab", + 0x00000403 => "\xae", + 0x00000404 => "\xb8", + 0x00000405 => "\xc1", + 0x00000406 => "\xa7", + 0x00000407 => "\xba", + 0x00000408 => "\xb7", + 0x00000409 => "\xbc", + 0x0000040a => "\xbe", + 0x0000040b => "\xcb", + 0x0000040c => "\xcd", + 0x0000040e => "\xd8", + 0x0000040f => "\xda", + 0x00000410 => "\x80", + 0x00000411 => "\x81", + 0x00000412 => "\x82", + 0x00000413 => "\x83", + 0x00000414 => "\x84", + 0x00000415 => "\x85", + 0x00000416 => "\x86", + 0x00000417 => "\x87", + 0x00000418 => "\x88", + 0x00000419 => "\x89", + 0x0000041a => "\x8a", + 0x0000041b => "\x8b", + 0x0000041c => "\x8c", + 0x0000041d => "\x8d", + 0x0000041e => "\x8e", + 0x0000041f => "\x8f", + 0x00000420 => "\x90", + 0x00000421 => "\x91", + 0x00000422 => "\x92", + 0x00000423 => "\x93", + 0x00000424 => "\x94", + 0x00000425 => "\x95", + 0x00000426 => "\x96", + 0x00000427 => "\x97", + 0x00000428 => "\x98", + 0x00000429 => "\x99", + 0x0000042a => "\x9a", + 0x0000042b => "\x9b", + 0x0000042c => "\x9c", + 0x0000042d => "\x9d", + 0x0000042e => "\x9e", + 0x0000042f => "\x9f", + 0x00000430 => "\xe0", + 0x00000431 => "\xe1", + 0x00000432 => "\xe2", + 0x00000433 => "\xe3", + 0x00000434 => "\xe4", + 0x00000435 => "\xe5", + 0x00000436 => "\xe6", + 0x00000437 => "\xe7", + 0x00000438 => "\xe8", + 0x00000439 => "\xe9", + 0x0000043a => "\xea", + 0x0000043b => "\xeb", + 0x0000043c => "\xec", + 0x0000043d => "\xed", + 0x0000043e => "\xee", + 0x0000043f => "\xef", + 0x00000440 => "\xf0", + 0x00000441 => "\xf1", + 0x00000442 => "\xf2", + 0x00000443 => "\xf3", + 0x00000444 => "\xf4", + 0x00000445 => "\xf5", + 0x00000446 => "\xf6", + 0x00000447 => "\xf7", + 0x00000448 => "\xf8", + 0x00000449 => "\xf9", + 0x0000044a => "\xfa", + 0x0000044b => "\xfb", + 0x0000044c => "\xfc", + 0x0000044d => "\xfd", + 0x0000044e => "\xfe", + 0x0000044f => "\xdf", + 0x00000451 => "\xde", + 0x00000452 => "\xac", + 0x00000453 => "\xaf", + 0x00000454 => "\xb9", + 0x00000455 => "\xcf", + 0x00000456 => "\xb4", + 0x00000457 => "\xbb", + 0x00000458 => "\xc0", + 0x00000459 => "\xbd", + 0x0000045a => "\xbf", + 0x0000045b => "\xcc", + 0x0000045c => "\xce", + 0x0000045e => "\xd9", + 0x0000045f => "\xdb", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xd7", + 0x00002020 => "\xa0", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002116 => "\xdc", + 0x00002122 => "\xaa", + 0x00002202 => "\xb6", + 0x00002206 => "\xc6", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACCYRILLIC - Conversion routines for MACCYRILLIC + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACCYRILLIC. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000410 | CYRILLIC CAPITAL LETTER A + 81 | 00000411 | CYRILLIC CAPITAL LETTER BE + 82 | 00000412 | CYRILLIC CAPITAL LETTER VE + 83 | 00000413 | CYRILLIC CAPITAL LETTER GHE + 84 | 00000414 | CYRILLIC CAPITAL LETTER DE + 85 | 00000415 | CYRILLIC CAPITAL LETTER IE + 86 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + 87 | 00000417 | CYRILLIC CAPITAL LETTER ZE + 88 | 00000418 | CYRILLIC CAPITAL LETTER I + 89 | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + 8A | 0000041A | CYRILLIC CAPITAL LETTER KA + 8B | 0000041B | CYRILLIC CAPITAL LETTER EL + 8C | 0000041C | CYRILLIC CAPITAL LETTER EM + 8D | 0000041D | CYRILLIC CAPITAL LETTER EN + 8E | 0000041E | CYRILLIC CAPITAL LETTER O + 8F | 0000041F | CYRILLIC CAPITAL LETTER PE + 90 | 00000420 | CYRILLIC CAPITAL LETTER ER + 91 | 00000421 | CYRILLIC CAPITAL LETTER ES + 92 | 00000422 | CYRILLIC CAPITAL LETTER TE + 93 | 00000423 | CYRILLIC CAPITAL LETTER U + 94 | 00000424 | CYRILLIC CAPITAL LETTER EF + 95 | 00000425 | CYRILLIC CAPITAL LETTER HA + 96 | 00000426 | CYRILLIC CAPITAL LETTER TSE + 97 | 00000427 | CYRILLIC CAPITAL LETTER CHE + 98 | 00000428 | CYRILLIC CAPITAL LETTER SHA + 99 | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + 9A | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + 9B | 0000042B | CYRILLIC CAPITAL LETTER YERU + 9C | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + 9D | 0000042D | CYRILLIC CAPITAL LETTER E + 9E | 0000042E | CYRILLIC CAPITAL LETTER YU + 9F | 0000042F | CYRILLIC CAPITAL LETTER YA + A0 | 00002020 | DAGGER + A1 | 000000B0 | DEGREE SIGN + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 00000402 | CYRILLIC CAPITAL LETTER DJE + AC | 00000452 | CYRILLIC SMALL LETTER DJE + AD | 00002260 | NOT EQUAL TO + AE | 00000403 | CYRILLIC CAPITAL LETTER GJE + AF | 00000453 | CYRILLIC SMALL LETTER GJE + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + B5 | 000000B5 | MICRO SIGN + B6 | 00002202 | PARTIAL DIFFERENTIAL + B7 | 00000408 | CYRILLIC CAPITAL LETTER JE + B8 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + B9 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + BA | 00000407 | CYRILLIC CAPITAL LETTER YI + BB | 00000457 | CYRILLIC SMALL LETTER YI + BC | 00000409 | CYRILLIC CAPITAL LETTER LJE + BD | 00000459 | CYRILLIC SMALL LETTER LJE + BE | 0000040A | CYRILLIC CAPITAL LETTER NJE + BF | 0000045A | CYRILLIC SMALL LETTER NJE + C0 | 00000458 | CYRILLIC SMALL LETTER JE + C1 | 00000405 | CYRILLIC CAPITAL LETTER DZE + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00002206 | INCREMENT + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 0000040B | CYRILLIC CAPITAL LETTER TSHE + CC | 0000045B | CYRILLIC SMALL LETTER TSHE + CD | 0000040C | CYRILLIC CAPITAL LETTER KJE + CE | 0000045C | CYRILLIC SMALL LETTER KJE + CF | 00000455 | CYRILLIC SMALL LETTER DZE + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + D8 | 0000040E | CYRILLIC CAPITAL LETTER SHORT U + D9 | 0000045E | CYRILLIC SMALL LETTER SHORT U + DA | 0000040F | CYRILLIC CAPITAL LETTER DZHE + DB | 0000045F | CYRILLIC SMALL LETTER DZHE + DC | 00002116 | NUMERO SIGN + DD | 00000401 | CYRILLIC CAPITAL LETTER IO + DE | 00000451 | CYRILLIC SMALL LETTER IO + DF | 0000044F | CYRILLIC SMALL LETTER YA + E0 | 00000430 | CYRILLIC SMALL LETTER A + E1 | 00000431 | CYRILLIC SMALL LETTER BE + E2 | 00000432 | CYRILLIC SMALL LETTER VE + E3 | 00000433 | CYRILLIC SMALL LETTER GHE + E4 | 00000434 | CYRILLIC SMALL LETTER DE + E5 | 00000435 | CYRILLIC SMALL LETTER IE + E6 | 00000436 | CYRILLIC SMALL LETTER ZHE + E7 | 00000437 | CYRILLIC SMALL LETTER ZE + E8 | 00000438 | CYRILLIC SMALL LETTER I + E9 | 00000439 | CYRILLIC SMALL LETTER SHORT I + EA | 0000043A | CYRILLIC SMALL LETTER KA + EB | 0000043B | CYRILLIC SMALL LETTER EL + EC | 0000043C | CYRILLIC SMALL LETTER EM + ED | 0000043D | CYRILLIC SMALL LETTER EN + EE | 0000043E | CYRILLIC SMALL LETTER O + EF | 0000043F | CYRILLIC SMALL LETTER PE + F0 | 00000440 | CYRILLIC SMALL LETTER ER + F1 | 00000441 | CYRILLIC SMALL LETTER ES + F2 | 00000442 | CYRILLIC SMALL LETTER TE + F3 | 00000443 | CYRILLIC SMALL LETTER U + F4 | 00000444 | CYRILLIC SMALL LETTER EF + F5 | 00000445 | CYRILLIC SMALL LETTER HA + F6 | 00000446 | CYRILLIC SMALL LETTER TSE + F7 | 00000447 | CYRILLIC SMALL LETTER CHE + F8 | 00000448 | CYRILLIC SMALL LETTER SHA + F9 | 00000449 | CYRILLIC SMALL LETTER SHCHA + FA | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + FB | 0000044B | CYRILLIC SMALL LETTER YERU + FC | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + FD | 0000044D | CYRILLIC SMALL LETTER E + FE | 0000044E | CYRILLIC SMALL LETTER YU + FF | 000000A4 | CURRENCY SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACGREEK.pm b/lib/Locale/RecodeData/MACGREEK.pm new file mode 100644 index 0000000..c57f597 --- /dev/null +++ b/lib/Locale/RecodeData/MACGREEK.pm @@ -0,0 +1,1138 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACGREEK. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACGREEK; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0x00b9, + 0x00b2, + 0x00c9, + 0x00b3, + 0x00d6, + 0x00dc, + 0x0385, + 0x00e0, + 0x00e2, + 0x00e4, + 0x0384, + 0x00a8, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00a3, + 0x2122, + 0x00ee, + 0x00ef, + 0x2022, + 0x00bd, + 0x2030, + 0x00f4, + 0x00f6, + 0x00a6, + 0x00ad, + 0x00f9, + 0x00fb, + 0x00fc, + 0x2020, + 0x0393, + 0x0394, + 0x0398, + 0x039b, + 0x039e, + 0x03a0, + 0x00df, + 0x00ae, + 0x00a9, + 0x03a3, + 0x03aa, + 0x00a7, + 0x2260, + 0x00b0, + 0x0387, + 0x0391, + 0x00b1, + 0x2264, + 0x2265, + 0x00a5, + 0x0392, + 0x0395, + 0x0396, + 0x0397, + 0x0399, + 0x039a, + 0x039c, + 0x03a6, + 0x03ab, + 0x03a8, + 0x03a9, + 0x03ac, + 0x039d, + 0x00ac, + 0x039f, + 0x03a1, + 0x2248, + 0x03a4, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x03a5, + 0x03a7, + 0x0386, + 0x0388, + 0x0153, + 0x2013, + 0x2015, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x0389, + 0x038a, + 0x038c, + 0x038e, + 0x03ad, + 0x03ae, + 0x03af, + 0x03cc, + 0x038f, + 0x03cd, + 0x03b1, + 0x03b2, + 0x03c8, + 0x03b4, + 0x03b5, + 0x03c6, + 0x03b3, + 0x03b7, + 0x03b9, + 0x03be, + 0x03ba, + 0x03bb, + 0x03bc, + 0x03bd, + 0x03bf, + 0x03c0, + 0x03ce, + 0x03c1, + 0x03c3, + 0x03c4, + 0x03b8, + 0x03c9, + 0x03c2, + 0x03c7, + 0x03c5, + 0x03b6, + 0x03ca, + 0x03cb, + 0x0390, + 0x03b0, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xc2\xb9", + "\xc2\xb2", + "\xc3\x89", + "\xc2\xb3", + "\xc3\x96", + "\xc3\x9c", + "\xce\x85", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xce\x84", + "\xc2\xa8", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc2\xa3", + "\xe2\x84\xa2", + "\xc3\xae", + "\xc3\xaf", + "\xe2\x80\xa2", + "\xc2\xbd", + "\xe2\x80\xb0", + "\xc3\xb4", + "\xc3\xb6", + "\xc2\xa6", + "\xc2\xad", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xe2\x80\xa0", + "\xce\x93", + "\xce\x94", + "\xce\x98", + "\xce\x9b", + "\xce\x9e", + "\xce\xa0", + "\xc3\x9f", + "\xc2\xae", + "\xc2\xa9", + "\xce\xa3", + "\xce\xaa", + "\xc2\xa7", + "\xe2\x89\xa0", + "\xc2\xb0", + "\xce\x87", + "\xce\x91", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xc2\xa5", + "\xce\x92", + "\xce\x95", + "\xce\x96", + "\xce\x97", + "\xce\x99", + "\xce\x9a", + "\xce\x9c", + "\xce\xa6", + "\xce\xab", + "\xce\xa8", + "\xce\xa9", + "\xce\xac", + "\xce\x9d", + "\xc2\xac", + "\xce\x9f", + "\xce\xa1", + "\xe2\x89\x88", + "\xce\xa4", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xce\xa5", + "\xce\xa7", + "\xce\x86", + "\xce\x88", + "\xc5\x93", + "\xe2\x80\x93", + "\xe2\x80\x95", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xce\x89", + "\xce\x8a", + "\xce\x8c", + "\xce\x8e", + "\xce\xad", + "\xce\xae", + "\xce\xaf", + "\xcf\x8c", + "\xce\x8f", + "\xcf\x8d", + "\xce\xb1", + "\xce\xb2", + "\xcf\x88", + "\xce\xb4", + "\xce\xb5", + "\xcf\x86", + "\xce\xb3", + "\xce\xb7", + "\xce\xb9", + "\xce\xbe", + "\xce\xba", + "\xce\xbb", + "\xce\xbc", + "\xce\xbd", + "\xce\xbf", + "\xcf\x80", + "\xcf\x8e", + "\xcf\x81", + "\xcf\x83", + "\xcf\x84", + "\xce\xb8", + "\xcf\x89", + "\xcf\x82", + "\xcf\x87", + "\xcf\x85", + "\xce\xb6", + "\xcf\x8a", + "\xcf\x8b", + "\xce\x90", + "\xce\xb0", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a3 => "\x92", + 0x000000a5 => "\xb4", + 0x000000a6 => "\x9b", + 0x000000a7 => "\xac", + 0x000000a8 => "\x8c", + 0x000000a9 => "\xa9", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ad => "\x9c", + 0x000000ae => "\xa8", + 0x000000b0 => "\xae", + 0x000000b1 => "\xb1", + 0x000000b2 => "\x82", + 0x000000b3 => "\x84", + 0x000000b9 => "\x81", + 0x000000bb => "\xc8", + 0x000000bd => "\x97", + 0x000000c4 => "\x80", + 0x000000c9 => "\x83", + 0x000000d6 => "\x85", + 0x000000dc => "\x86", + 0x000000df => "\xa7", + 0x000000e0 => "\x88", + 0x000000e2 => "\x89", + 0x000000e4 => "\x8a", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f4 => "\x99", + 0x000000f6 => "\x9a", + 0x000000f7 => "\xd6", + 0x000000f9 => "\x9d", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x00000153 => "\xcf", + 0x00000384 => "\x8b", + 0x00000385 => "\x87", + 0x00000386 => "\xcd", + 0x00000387 => "\xaf", + 0x00000388 => "\xce", + 0x00000389 => "\xd7", + 0x0000038a => "\xd8", + 0x0000038c => "\xd9", + 0x0000038e => "\xda", + 0x0000038f => "\xdf", + 0x00000390 => "\xfd", + 0x00000391 => "\xb0", + 0x00000392 => "\xb5", + 0x00000393 => "\xa1", + 0x00000394 => "\xa2", + 0x00000395 => "\xb6", + 0x00000396 => "\xb7", + 0x00000397 => "\xb8", + 0x00000398 => "\xa3", + 0x00000399 => "\xb9", + 0x0000039a => "\xba", + 0x0000039b => "\xa4", + 0x0000039c => "\xbb", + 0x0000039d => "\xc1", + 0x0000039e => "\xa5", + 0x0000039f => "\xc3", + 0x000003a0 => "\xa6", + 0x000003a1 => "\xc4", + 0x000003a3 => "\xaa", + 0x000003a4 => "\xc6", + 0x000003a5 => "\xcb", + 0x000003a6 => "\xbc", + 0x000003a7 => "\xcc", + 0x000003a8 => "\xbe", + 0x000003a9 => "\xbf", + 0x000003aa => "\xab", + 0x000003ab => "\xbd", + 0x000003ac => "\xc0", + 0x000003ad => "\xdb", + 0x000003ae => "\xdc", + 0x000003af => "\xdd", + 0x000003b0 => "\xfe", + 0x000003b1 => "\xe1", + 0x000003b2 => "\xe2", + 0x000003b3 => "\xe7", + 0x000003b4 => "\xe4", + 0x000003b5 => "\xe5", + 0x000003b6 => "\xfa", + 0x000003b7 => "\xe8", + 0x000003b8 => "\xf5", + 0x000003b9 => "\xe9", + 0x000003ba => "\xeb", + 0x000003bb => "\xec", + 0x000003bc => "\xed", + 0x000003bd => "\xee", + 0x000003be => "\xea", + 0x000003bf => "\xef", + 0x000003c0 => "\xf0", + 0x000003c1 => "\xf2", + 0x000003c2 => "\xf7", + 0x000003c3 => "\xf3", + 0x000003c4 => "\xf4", + 0x000003c5 => "\xf9", + 0x000003c6 => "\xe6", + 0x000003c7 => "\xf8", + 0x000003c8 => "\xe3", + 0x000003c9 => "\xf6", + 0x000003ca => "\xfb", + 0x000003cb => "\xfc", + 0x000003cc => "\xde", + 0x000003cd => "\xe0", + 0x000003ce => "\xf1", + 0x00002013 => "\xd0", + 0x00002015 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x00002020 => "\xa0", + 0x00002022 => "\x96", + 0x00002026 => "\xc9", + 0x00002030 => "\x98", + 0x00002122 => "\x93", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACGREEK - Conversion routines for MACGREEK + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACGREEK. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 000000B9 | SUPERSCRIPT ONE + 82 | 000000B2 | SUPERSCRIPT TWO + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000B3 | SUPERSCRIPT THREE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 00000385 | GREEK DIALYTIKA TONOS + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 00000384 | GREEK TONOS + 8C | 000000A8 | DIAERESIS + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000A3 | POUND SIGN + 93 | 00002122 | TRADE MARK SIGN + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 00002022 | BULLET + 97 | 000000BD | VULGAR FRACTION ONE HALF + 98 | 00002030 | PER MILLE SIGN + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000A6 | BROKEN BAR + 9C | 000000AD | SOFT HYPHEN + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A0 | 00002020 | DAGGER + A1 | 00000393 | GREEK CAPITAL LETTER GAMMA + A2 | 00000394 | GREEK CAPITAL LETTER DELTA + A3 | 00000398 | GREEK CAPITAL LETTER THETA + A4 | 0000039B | GREEK CAPITAL LETTER LAMDA + A5 | 0000039E | GREEK CAPITAL LETTER XI + A6 | 000003A0 | GREEK CAPITAL LETTER PI + A7 | 000000DF | LATIN SMALL LETTER SHARP S + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 000003A3 | GREEK CAPITAL LETTER SIGMA + AB | 000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + AC | 000000A7 | SECTION SIGN + AD | 00002260 | NOT EQUAL TO + AE | 000000B0 | DEGREE SIGN + AF | 00000387 | GREEK ANO TELEIA + B0 | 00000391 | GREEK CAPITAL LETTER ALPHA + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 000000A5 | YEN SIGN + B5 | 00000392 | GREEK CAPITAL LETTER BETA + B6 | 00000395 | GREEK CAPITAL LETTER EPSILON + B7 | 00000396 | GREEK CAPITAL LETTER ZETA + B8 | 00000397 | GREEK CAPITAL LETTER ETA + B9 | 00000399 | GREEK CAPITAL LETTER IOTA + BA | 0000039A | GREEK CAPITAL LETTER KAPPA + BB | 0000039C | GREEK CAPITAL LETTER MU + BC | 000003A6 | GREEK CAPITAL LETTER PHI + BD | 000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + BE | 000003A8 | GREEK CAPITAL LETTER PSI + BF | 000003A9 | GREEK CAPITAL LETTER OMEGA + C0 | 000003AC | GREEK SMALL LETTER ALPHA WITH TONOS + C1 | 0000039D | GREEK CAPITAL LETTER NU + C2 | 000000AC | NOT SIGN + C3 | 0000039F | GREEK CAPITAL LETTER OMICRON + C4 | 000003A1 | GREEK CAPITAL LETTER RHO + C5 | 00002248 | ALMOST EQUAL TO + C6 | 000003A4 | GREEK CAPITAL LETTER TAU + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 000003A5 | GREEK CAPITAL LETTER UPSILON + CC | 000003A7 | GREEK CAPITAL LETTER CHI + CD | 00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS + CE | 00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS + CF | 00000153 | LATIN SMALL LIGATURE OE + D0 | 00002013 | EN DASH + D1 | 00002015 | HORIZONTAL BAR + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 00000389 | GREEK CAPITAL LETTER ETA WITH TONOS + D8 | 0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS + D9 | 0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS + DA | 0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS + DB | 000003AD | GREEK SMALL LETTER EPSILON WITH TONOS + DC | 000003AE | GREEK SMALL LETTER ETA WITH TONOS + DD | 000003AF | GREEK SMALL LETTER IOTA WITH TONOS + DE | 000003CC | GREEK SMALL LETTER OMICRON WITH TONOS + DF | 0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS + E0 | 000003CD | GREEK SMALL LETTER UPSILON WITH TONOS + E1 | 000003B1 | GREEK SMALL LETTER ALPHA + E2 | 000003B2 | GREEK SMALL LETTER BETA + E3 | 000003C8 | GREEK SMALL LETTER PSI + E4 | 000003B4 | GREEK SMALL LETTER DELTA + E5 | 000003B5 | GREEK SMALL LETTER EPSILON + E6 | 000003C6 | GREEK SMALL LETTER PHI + E7 | 000003B3 | GREEK SMALL LETTER GAMMA + E8 | 000003B7 | GREEK SMALL LETTER ETA + E9 | 000003B9 | GREEK SMALL LETTER IOTA + EA | 000003BE | GREEK SMALL LETTER XI + EB | 000003BA | GREEK SMALL LETTER KAPPA + EC | 000003BB | GREEK SMALL LETTER LAMDA + ED | 000003BC | GREEK SMALL LETTER MU + EE | 000003BD | GREEK SMALL LETTER NU + EF | 000003BF | GREEK SMALL LETTER OMICRON + F0 | 000003C0 | GREEK SMALL LETTER PI + F1 | 000003CE | GREEK SMALL LETTER OMEGA WITH TONOS + F2 | 000003C1 | GREEK SMALL LETTER RHO + F3 | 000003C3 | GREEK SMALL LETTER SIGMA + F4 | 000003C4 | GREEK SMALL LETTER TAU + F5 | 000003B8 | GREEK SMALL LETTER THETA + F6 | 000003C9 | GREEK SMALL LETTER OMEGA + F7 | 000003C2 | GREEK SMALL LETTER FINAL SIGMA + F8 | 000003C7 | GREEK SMALL LETTER CHI + F9 | 000003C5 | GREEK SMALL LETTER UPSILON + FA | 000003B6 | GREEK SMALL LETTER ZETA + FB | 000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA + FC | 000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA + FD | 00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + FE | 000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACHEBREW.pm b/lib/Locale/RecodeData/MACHEBREW.pm new file mode 100644 index 0000000..6bbbb17 --- /dev/null +++ b/lib/Locale/RecodeData/MACHEBREW.pm @@ -0,0 +1,1056 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACHEBREW. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACHEBREW; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0xfb1f, + 0x00c7, + 0x00c9, + 0x00d1, + 0x00d6, + 0x00dc, + 0x00e1, + 0x00e0, + 0x00e2, + 0x00e4, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00ed, + 0x00ec, + 0x00ee, + 0x00ef, + 0x00f1, + 0x00f3, + 0x00f2, + 0x00f4, + 0x00f6, + 0x00f5, + 0x00fa, + 0x00f9, + 0x00fb, + 0x00fc, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x20aa, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x201e, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x05bc, + 0xfb4b, + 0xfb35, + 0x2026, + 0x00a0, + 0x05b8, + 0x05b7, + 0x05b5, + 0x05b6, + 0x05b4, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0xfb2a, + 0xfb2b, + 0x05bf, + 0x05b0, + 0x05b2, + 0x05b1, + 0x05bb, + 0x05b9, + 0xfffd, + 0x05b3, + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xef\xac\x9f", + "\xc3\x87", + "\xc3\x89", + "\xc3\x91", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xa1", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xad", + "\xc3\xac", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb1", + "\xc3\xb3", + "\xc3\xb2", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb5", + "\xc3\xba", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x82\xaa", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x9e", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xd6\xbc", + "\xef\xad\x8b", + "\xef\xac\xb5", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xd6\xb8", + "\xd6\xb7", + "\xd6\xb5", + "\xd6\xb6", + "\xd6\xb4", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xef\xac\xaa", + "\xef\xac\xab", + "\xd6\xbf", + "\xd6\xb0", + "\xd6\xb2", + "\xd6\xb1", + "\xd6\xbb", + "\xd6\xb9", + "\xef\xbf\xbd", + "\xd6\xb3", + "\xd7\x90", + "\xd7\x91", + "\xd7\x92", + "\xd7\x93", + "\xd7\x94", + "\xd7\x95", + "\xd7\x96", + "\xd7\x97", + "\xd7\x98", + "\xd7\x99", + "\xd7\x9a", + "\xd7\x9b", + "\xd7\x9c", + "\xd7\x9d", + "\xd7\x9e", + "\xd7\x9f", + "\xd7\xa0", + "\xd7\xa1", + "\xd7\xa2", + "\xd7\xa3", + "\xd7\xa4", + "\xd7\xa5", + "\xd7\xa6", + "\xd7\xa7", + "\xd7\xa8", + "\xd7\xa9", + "\xd7\xaa", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000c4 => "\x80", + 0x000000c7 => "\x82", + 0x000000c9 => "\x83", + 0x000000d1 => "\x84", + 0x000000d6 => "\x85", + 0x000000dc => "\x86", + 0x000000e0 => "\x88", + 0x000000e1 => "\x87", + 0x000000e2 => "\x89", + 0x000000e3 => "\x8b", + 0x000000e4 => "\x8a", + 0x000000e5 => "\x8c", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ec => "\x93", + 0x000000ed => "\x92", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f1 => "\x96", + 0x000000f2 => "\x98", + 0x000000f3 => "\x97", + 0x000000f4 => "\x99", + 0x000000f5 => "\x9b", + 0x000000f6 => "\x9a", + 0x000000f9 => "\x9d", + 0x000000fa => "\x9c", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x000005b0 => "\xd9", + 0x000005b1 => "\xdb", + 0x000005b2 => "\xda", + 0x000005b3 => "\xdf", + 0x000005b4 => "\xcf", + 0x000005b5 => "\xcd", + 0x000005b6 => "\xce", + 0x000005b7 => "\xcc", + 0x000005b8 => "\xcb", + 0x000005b9 => "\xdd", + 0x000005bb => "\xdc", + 0x000005bc => "\xc6", + 0x000005bf => "\xd8", + 0x000005d0 => "\xe0", + 0x000005d1 => "\xe1", + 0x000005d2 => "\xe2", + 0x000005d3 => "\xe3", + 0x000005d4 => "\xe4", + 0x000005d5 => "\xe5", + 0x000005d6 => "\xe6", + 0x000005d7 => "\xe7", + 0x000005d8 => "\xe8", + 0x000005d9 => "\xe9", + 0x000005da => "\xea", + 0x000005db => "\xeb", + 0x000005dc => "\xec", + 0x000005dd => "\xed", + 0x000005de => "\xee", + 0x000005df => "\xef", + 0x000005e0 => "\xf0", + 0x000005e1 => "\xf1", + 0x000005e2 => "\xf2", + 0x000005e3 => "\xf3", + 0x000005e4 => "\xf4", + 0x000005e5 => "\xf5", + 0x000005e6 => "\xf6", + 0x000005e7 => "\xf7", + 0x000005e8 => "\xf8", + 0x000005e9 => "\xf9", + 0x000005ea => "\xfa", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xc1", + 0x00002026 => "\xc9", + 0x000020aa => "\xa6", + 0x0000fb1f => "\x81", + 0x0000fb2a => "\xd6", + 0x0000fb2b => "\xd7", + 0x0000fb35 => "\xc8", + 0x0000fb4b => "\xc7", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACHEBREW - Conversion routines for MACHEBREW + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACHEBREW. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 0000FB1F | HEBREW LIGATURE YIDDISH YOD YOD PATAH + 82 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 8C | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 93 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 97 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + 98 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 9C | 000000FA | LATIN SMALL LETTER U WITH ACUTE + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A6 | 000020AA | NEW SHEQEL SIGN + C1 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + C6 | 000005BC | HEBREW POINT DAGESH OR MAPIQ + C7 | 0000FB4B | HEBREW LETTER VAV WITH HOLAM + C8 | 0000FB35 | HEBREW LETTER VAV WITH DAGESH + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 000005B8 | HEBREW POINT QAMATS + CC | 000005B7 | HEBREW POINT PATAH + CD | 000005B5 | HEBREW POINT TSERE + CE | 000005B6 | HEBREW POINT SEGOL + CF | 000005B4 | HEBREW POINT HIRIQ + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 0000FB2A | HEBREW LETTER SHIN WITH SHIN DOT + D7 | 0000FB2B | HEBREW LETTER SHIN WITH SIN DOT + D8 | 000005BF | HEBREW POINT RAFE + D9 | 000005B0 | HEBREW POINT SHEVA + DA | 000005B2 | HEBREW POINT HATAF PATAH + DB | 000005B1 | HEBREW POINT HATAF SEGOL + DC | 000005BB | HEBREW POINT QUBUTS + DD | 000005B9 | HEBREW POINT HOLAM + DF | 000005B3 | HEBREW POINT HATAF QAMATS + E0 | 000005D0 | HEBREW LETTER ALEF + E1 | 000005D1 | HEBREW LETTER BET + E2 | 000005D2 | HEBREW LETTER GIMEL + E3 | 000005D3 | HEBREW LETTER DALET + E4 | 000005D4 | HEBREW LETTER HE + E5 | 000005D5 | HEBREW LETTER VAV + E6 | 000005D6 | HEBREW LETTER ZAYIN + E7 | 000005D7 | HEBREW LETTER HET + E8 | 000005D8 | HEBREW LETTER TET + E9 | 000005D9 | HEBREW LETTER YOD + EA | 000005DA | HEBREW LETTER FINAL KAF + EB | 000005DB | HEBREW LETTER KAF + EC | 000005DC | HEBREW LETTER LAMED + ED | 000005DD | HEBREW LETTER FINAL MEM + EE | 000005DE | HEBREW LETTER MEM + EF | 000005DF | HEBREW LETTER FINAL NUN + F0 | 000005E0 | HEBREW LETTER NUN + F1 | 000005E1 | HEBREW LETTER SAMEKH + F2 | 000005E2 | HEBREW LETTER AYIN + F3 | 000005E3 | HEBREW LETTER FINAL PE + F4 | 000005E4 | HEBREW LETTER PE + F5 | 000005E5 | HEBREW LETTER FINAL TSADI + F6 | 000005E6 | HEBREW LETTER TSADI + F7 | 000005E7 | HEBREW LETTER QOF + F8 | 000005E8 | HEBREW LETTER RESH + F9 | 000005E9 | HEBREW LETTER SHIN + FA | 000005EA | HEBREW LETTER TAV + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACICELAND.pm b/lib/Locale/RecodeData/MACICELAND.pm new file mode 100644 index 0000000..2045c95 --- /dev/null +++ b/lib/Locale/RecodeData/MACICELAND.pm @@ -0,0 +1,1138 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACICELAND. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACICELAND; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0x00c5, + 0x00c7, + 0x00c9, + 0x00d1, + 0x00d6, + 0x00dc, + 0x00e1, + 0x00e0, + 0x00e2, + 0x00e4, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00ed, + 0x00ec, + 0x00ee, + 0x00ef, + 0x00f1, + 0x00f3, + 0x00f2, + 0x00f4, + 0x00f6, + 0x00f5, + 0x00fa, + 0x00f9, + 0x00fb, + 0x00fc, + 0x00dd, + 0x00b0, + 0x00a2, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x00df, + 0x00ae, + 0x00a9, + 0x2122, + 0x00b4, + 0x00a8, + 0x2260, + 0x00c6, + 0x00d8, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x00a5, + 0x00b5, + 0x2202, + 0x2211, + 0x220f, + 0x03c0, + 0x222b, + 0x00aa, + 0x00ba, + 0x2126, + 0x00e6, + 0x00f8, + 0x00bf, + 0x00a1, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x2206, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x00c0, + 0x00c3, + 0x00d5, + 0x0152, + 0x0153, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x25ca, + 0x00ff, + 0x0178, + 0x2044, + 0x00a4, + 0x00d0, + 0x00f0, + 0x00de, + 0x00fe, + 0x00fd, + 0x00b7, + 0x201a, + 0x201e, + 0x2030, + 0x00c2, + 0x00ca, + 0x00c1, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00d3, + 0x00d4, + 0xfffd, + 0x00d2, + 0x00da, + 0x00db, + 0x00d9, + 0x0131, + 0x02c6, + 0x02dc, + 0x00af, + 0x02d8, + 0x02d9, + 0x02da, + 0x00b8, + 0x02dd, + 0x02db, + 0x02c7, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xc3\x85", + "\xc3\x87", + "\xc3\x89", + "\xc3\x91", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xa1", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xad", + "\xc3\xac", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb1", + "\xc3\xb3", + "\xc3\xb2", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb5", + "\xc3\xba", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\x9d", + "\xc2\xb0", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xc3\x9f", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xc2\xb4", + "\xc2\xa8", + "\xe2\x89\xa0", + "\xc3\x86", + "\xc3\x98", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xc2\xa5", + "\xc2\xb5", + "\xe2\x88\x82", + "\xe2\x88\x91", + "\xe2\x88\x8f", + "\xcf\x80", + "\xe2\x88\xab", + "\xc2\xaa", + "\xc2\xba", + "\xe2\x84\xa6", + "\xc3\xa6", + "\xc3\xb8", + "\xc2\xbf", + "\xc2\xa1", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xe2\x88\x86", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xc3\x80", + "\xc3\x83", + "\xc3\x95", + "\xc5\x92", + "\xc5\x93", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x97\x8a", + "\xc3\xbf", + "\xc5\xb8", + "\xe2\x81\x84", + "\xc2\xa4", + "\xc3\x90", + "\xc3\xb0", + "\xc3\x9e", + "\xc3\xbe", + "\xc3\xbd", + "\xc2\xb7", + "\xe2\x80\x9a", + "\xe2\x80\x9e", + "\xe2\x80\xb0", + "\xc3\x82", + "\xc3\x8a", + "\xc3\x81", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\x93", + "\xc3\x94", + "\xef\xbf\xbd", + "\xc3\x92", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x99", + "\xc4\xb1", + "\xcb\x86", + "\xcb\x9c", + "\xc2\xaf", + "\xcb\x98", + "\xcb\x99", + "\xcb\x9a", + "\xc2\xb8", + "\xcb\x9d", + "\xcb\x9b", + "\xcb\x87", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a1 => "\xc1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xdb", + 0x000000a5 => "\xb4", + 0x000000a7 => "\xa4", + 0x000000a8 => "\xac", + 0x000000a9 => "\xa9", + 0x000000aa => "\xbb", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000af => "\xf8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b4 => "\xab", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000b7 => "\xe1", + 0x000000b8 => "\xfc", + 0x000000ba => "\xbc", + 0x000000bb => "\xc8", + 0x000000bf => "\xc0", + 0x000000c0 => "\xcb", + 0x000000c1 => "\xe7", + 0x000000c2 => "\xe5", + 0x000000c3 => "\xcc", + 0x000000c4 => "\x80", + 0x000000c5 => "\x81", + 0x000000c6 => "\xae", + 0x000000c7 => "\x82", + 0x000000c8 => "\xe9", + 0x000000c9 => "\x83", + 0x000000ca => "\xe6", + 0x000000cb => "\xe8", + 0x000000cc => "\xed", + 0x000000cd => "\xea", + 0x000000ce => "\xeb", + 0x000000cf => "\xec", + 0x000000d0 => "\xdc", + 0x000000d1 => "\x84", + 0x000000d2 => "\xf1", + 0x000000d3 => "\xee", + 0x000000d4 => "\xef", + 0x000000d5 => "\xcd", + 0x000000d6 => "\x85", + 0x000000d8 => "\xaf", + 0x000000d9 => "\xf4", + 0x000000da => "\xf2", + 0x000000db => "\xf3", + 0x000000dc => "\x86", + 0x000000dd => "\xa0", + 0x000000de => "\xde", + 0x000000df => "\xa7", + 0x000000e0 => "\x88", + 0x000000e1 => "\x87", + 0x000000e2 => "\x89", + 0x000000e3 => "\x8b", + 0x000000e4 => "\x8a", + 0x000000e5 => "\x8c", + 0x000000e6 => "\xbe", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ec => "\x93", + 0x000000ed => "\x92", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f0 => "\xdd", + 0x000000f1 => "\x96", + 0x000000f2 => "\x98", + 0x000000f3 => "\x97", + 0x000000f4 => "\x99", + 0x000000f5 => "\x9b", + 0x000000f6 => "\x9a", + 0x000000f7 => "\xd6", + 0x000000f8 => "\xbf", + 0x000000f9 => "\x9d", + 0x000000fa => "\x9c", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x000000fd => "\xe0", + 0x000000fe => "\xdf", + 0x000000ff => "\xd8", + 0x00000131 => "\xf5", + 0x00000152 => "\xce", + 0x00000153 => "\xcf", + 0x00000178 => "\xd9", + 0x00000192 => "\xc4", + 0x000002c6 => "\xf6", + 0x000002c7 => "\xff", + 0x000002d8 => "\xf9", + 0x000002d9 => "\xfa", + 0x000002da => "\xfb", + 0x000002db => "\xfe", + 0x000002dc => "\xf7", + 0x000002dd => "\xfd", + 0x000003c0 => "\xb9", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201a => "\xe2", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xe3", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002030 => "\xe4", + 0x00002044 => "\xda", + 0x00002122 => "\xaa", + 0x00002126 => "\xbd", + 0x00002202 => "\xb6", + 0x00002206 => "\xc6", + 0x0000220f => "\xb8", + 0x00002211 => "\xb7", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x0000222b => "\xba", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", + 0x000025ca => "\xd7", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACICELAND - Conversion routines for MACICELAND + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACICELAND. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 82 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 8C | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 93 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 97 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + 98 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 9C | 000000FA | LATIN SMALL LETTER U WITH ACUTE + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A0 | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + A1 | 000000B0 | DEGREE SIGN + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 000000DF | LATIN SMALL LETTER SHARP S + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 000000B4 | ACUTE ACCENT + AC | 000000A8 | DIAERESIS + AD | 00002260 | NOT EQUAL TO + AE | 000000C6 | LATIN CAPITAL LETTER AE + AF | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 000000A5 | YEN SIGN + B5 | 000000B5 | MICRO SIGN + B6 | 00002202 | PARTIAL DIFFERENTIAL + B7 | 00002211 | N-ARY SUMMATION + B8 | 0000220F | N-ARY PRODUCT + B9 | 000003C0 | GREEK SMALL LETTER PI + BA | 0000222B | INTEGRAL + BB | 000000AA | FEMININE ORDINAL INDICATOR + BC | 000000BA | MASCULINE ORDINAL INDICATOR + BD | 00002126 | OHM SIGN + BE | 000000E6 | LATIN SMALL LETTER AE + BF | 000000F8 | LATIN SMALL LETTER O WITH STROKE + C0 | 000000BF | INVERTED QUESTION MARK + C1 | 000000A1 | INVERTED EXCLAMATION MARK + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00002206 | INCREMENT + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + CC | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + CD | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + CE | 00000152 | LATIN CAPITAL LIGATURE OE + CF | 00000153 | LATIN SMALL LIGATURE OE + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 000025CA | LOZENGE + D8 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + D9 | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + DA | 00002044 | FRACTION SLASH + DB | 000000A4 | CURRENCY SIGN + DC | 000000D0 | LATIN CAPITAL LETTER ETH + DD | 000000F0 | LATIN SMALL LETTER ETH + DE | 000000DE | LATIN CAPITAL LETTER THORN + DF | 000000FE | LATIN SMALL LETTER THORN + E0 | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + E1 | 000000B7 | MIDDLE DOT + E2 | 0000201A | SINGLE LOW-9 QUOTATION MARK + E3 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + E4 | 00002030 | PER MILLE SIGN + E5 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + E6 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + E7 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + E8 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + E9 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + EA | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + EB | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + EC | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + ED | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + F1 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + F2 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + F3 | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + F4 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + F5 | 00000131 | LATIN SMALL LETTER DOTLESS I + F6 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + F7 | 000002DC | SMALL TILDE + F8 | 000000AF | MACRON + F9 | 000002D8 | BREVE + FA | 000002D9 | DOT ABOVE + FB | 000002DA | RING ABOVE + FC | 000000B8 | CEDILLA + FD | 000002DD | DOUBLE ACUTE ACCENT + FE | 000002DB | OGONEK + FF | 000002C7 | CARON + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACINTOSH.pm b/lib/Locale/RecodeData/MACINTOSH.pm new file mode 100644 index 0000000..fcc7ee3 --- /dev/null +++ b/lib/Locale/RecodeData/MACINTOSH.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACINTOSH. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACINTOSH; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0x00c5, + 0x00c7, + 0x00c9, + 0x00d1, + 0x00d6, + 0x00dc, + 0x00e1, + 0x00e0, + 0x00e2, + 0x00e4, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00ed, + 0x00ec, + 0x00ee, + 0x00ef, + 0x00f1, + 0x00f3, + 0x00f2, + 0x00f4, + 0x00f6, + 0x00f5, + 0x00fa, + 0x00f9, + 0x00fb, + 0x00fc, + 0x2020, + 0x00b0, + 0x00a2, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x00df, + 0x00ae, + 0x00a9, + 0x2122, + 0x00b4, + 0x00a8, + 0x2260, + 0x00c6, + 0x00d8, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x00a5, + 0x00b5, + 0x2202, + 0x2211, + 0x220f, + 0x03c0, + 0x222b, + 0x00aa, + 0x00ba, + 0x03a9, + 0x00e6, + 0x00f8, + 0x00bf, + 0x00a1, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x0394, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x00c0, + 0x00c3, + 0x00d5, + 0x0152, + 0x0153, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x25ca, + 0x00ff, + 0x0178, + 0x2044, + 0x20ac, + 0x2039, + 0x203a, + 0xfb01, + 0xfb02, + 0x2021, + 0x00b7, + 0x201a, + 0x201e, + 0x2030, + 0x00c2, + 0x00ca, + 0x00c1, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00d3, + 0x00d4, + 0xe01e, + 0x00d2, + 0x00da, + 0x00db, + 0x00d9, + 0x0131, + 0x02c6, + 0x02dc, + 0x00af, + 0x02d8, + 0x02d9, + 0x02da, + 0x00b8, + 0x02dd, + 0x02db, + 0x02c7, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xc3\x85", + "\xc3\x87", + "\xc3\x89", + "\xc3\x91", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xa1", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xad", + "\xc3\xac", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb1", + "\xc3\xb3", + "\xc3\xb2", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb5", + "\xc3\xba", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xe2\x80\xa0", + "\xc2\xb0", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xc3\x9f", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xc2\xb4", + "\xc2\xa8", + "\xe2\x89\xa0", + "\xc3\x86", + "\xc3\x98", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xc2\xa5", + "\xc2\xb5", + "\xe2\x88\x82", + "\xe2\x88\x91", + "\xe2\x88\x8f", + "\xcf\x80", + "\xe2\x88\xab", + "\xc2\xaa", + "\xc2\xba", + "\xce\xa9", + "\xc3\xa6", + "\xc3\xb8", + "\xc2\xbf", + "\xc2\xa1", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xce\x94", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xc3\x80", + "\xc3\x83", + "\xc3\x95", + "\xc5\x92", + "\xc5\x93", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x97\x8a", + "\xc3\xbf", + "\xc5\xb8", + "\xe2\x81\x84", + "\xe2\x82\xac", + "\xe2\x80\xb9", + "\xe2\x80\xba", + "\xef\xac\x81", + "\xef\xac\x82", + "\xe2\x80\xa1", + "\xc2\xb7", + "\xe2\x80\x9a", + "\xe2\x80\x9e", + "\xe2\x80\xb0", + "\xc3\x82", + "\xc3\x8a", + "\xc3\x81", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\x93", + "\xc3\x94", + "\xee\x80\x9e", + "\xc3\x92", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x99", + "\xc4\xb1", + "\xcb\x86", + "\xcb\x9c", + "\xc2\xaf", + "\xcb\x98", + "\xcb\x99", + "\xcb\x9a", + "\xc2\xb8", + "\xcb\x9d", + "\xcb\x9b", + "\xcb\x87", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a1 => "\xc1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a5 => "\xb4", + 0x000000a7 => "\xa4", + 0x000000a8 => "\xac", + 0x000000a9 => "\xa9", + 0x000000aa => "\xbb", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000af => "\xf8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b4 => "\xab", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000b7 => "\xe1", + 0x000000b8 => "\xfc", + 0x000000ba => "\xbc", + 0x000000bb => "\xc8", + 0x000000bf => "\xc0", + 0x000000c0 => "\xcb", + 0x000000c1 => "\xe7", + 0x000000c2 => "\xe5", + 0x000000c3 => "\xcc", + 0x000000c4 => "\x80", + 0x000000c5 => "\x81", + 0x000000c6 => "\xae", + 0x000000c7 => "\x82", + 0x000000c8 => "\xe9", + 0x000000c9 => "\x83", + 0x000000ca => "\xe6", + 0x000000cb => "\xe8", + 0x000000cc => "\xed", + 0x000000cd => "\xea", + 0x000000ce => "\xeb", + 0x000000cf => "\xec", + 0x000000d1 => "\x84", + 0x000000d2 => "\xf1", + 0x000000d3 => "\xee", + 0x000000d4 => "\xef", + 0x000000d5 => "\xcd", + 0x000000d6 => "\x85", + 0x000000d8 => "\xaf", + 0x000000d9 => "\xf4", + 0x000000da => "\xf2", + 0x000000db => "\xf3", + 0x000000dc => "\x86", + 0x000000df => "\xa7", + 0x000000e0 => "\x88", + 0x000000e1 => "\x87", + 0x000000e2 => "\x89", + 0x000000e3 => "\x8b", + 0x000000e4 => "\x8a", + 0x000000e5 => "\x8c", + 0x000000e6 => "\xbe", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ec => "\x93", + 0x000000ed => "\x92", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f1 => "\x96", + 0x000000f2 => "\x98", + 0x000000f3 => "\x97", + 0x000000f4 => "\x99", + 0x000000f5 => "\x9b", + 0x000000f6 => "\x9a", + 0x000000f7 => "\xd6", + 0x000000f8 => "\xbf", + 0x000000f9 => "\x9d", + 0x000000fa => "\x9c", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x000000ff => "\xd8", + 0x00000131 => "\xf5", + 0x00000152 => "\xce", + 0x00000153 => "\xcf", + 0x00000178 => "\xd9", + 0x00000192 => "\xc4", + 0x000002c6 => "\xf6", + 0x000002c7 => "\xff", + 0x000002d8 => "\xf9", + 0x000002d9 => "\xfa", + 0x000002da => "\xfb", + 0x000002db => "\xfe", + 0x000002dc => "\xf7", + 0x000002dd => "\xfd", + 0x00000394 => "\xc6", + 0x000003a9 => "\xbd", + 0x000003c0 => "\xb9", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201a => "\xe2", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xe3", + 0x00002020 => "\xa0", + 0x00002021 => "\xe0", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002030 => "\xe4", + 0x00002039 => "\xdc", + 0x0000203a => "\xdd", + 0x00002044 => "\xda", + 0x000020ac => "\xdb", + 0x00002122 => "\xaa", + 0x00002202 => "\xb6", + 0x0000220f => "\xb8", + 0x00002211 => "\xb7", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x0000222b => "\xba", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", + 0x000025ca => "\xd7", + 0x0000e01e => "\xf0", + 0x0000fb01 => "\xde", + 0x0000fb02 => "\xdf", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACINTOSH - Conversion routines for MACINTOSH + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACINTOSH. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: The Unicode Standard ver 1.0, ISBN 0-201-56788-1, Oct 1991 + alias MAC + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 82 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 8C | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 93 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 97 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + 98 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 9C | 000000FA | LATIN SMALL LETTER U WITH ACUTE + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A0 | 00002020 | DAGGER + A1 | 000000B0 | DEGREE SIGN + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 000000DF | LATIN SMALL LETTER SHARP S (German) + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 000000B4 | ACUTE ACCENT + AC | 000000A8 | DIAERESIS + AD | 00002260 | NOT EQUAL TO + AE | 000000C6 | LATIN CAPITAL LETTER AE + AF | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 000000A5 | YEN SIGN + B5 | 000000B5 | MICRO SIGN + B6 | 00002202 | PARTIAL DIFFERENTIAL + B7 | 00002211 | N-ARY SUMMATION + B8 | 0000220F | N-ARY PRODUCT + B9 | 000003C0 | GREEK SMALL LETTER PI + BA | 0000222B | INTEGRAL + BB | 000000AA | FEMININE ORDINAL INDICATOR + BC | 000000BA | MASCULINE ORDINAL INDICATOR + BD | 000003A9 | GREEK CAPITAL LETTER OMEGA + BE | 000000E6 | LATIN SMALL LETTER AE + BF | 000000F8 | LATIN SMALL LETTER O WITH STROKE + C0 | 000000BF | INVERTED QUESTION MARK + C1 | 000000A1 | INVERTED EXCLAMATION MARK + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00000394 | GREEK CAPITAL LETTER DELTA + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + CC | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + CD | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + CE | 00000152 | LATIN CAPITAL LIGATURE OE + CF | 00000153 | LATIN SMALL LIGATURE OE + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 000025CA | LOZENGE + D8 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + D9 | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + DA | 00002044 | FRACTION SLASH + DB | 000020AC | EURO SIGN + DC | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + DD | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + DE | 0000FB01 | LATIN SMALL LIGATURE FI + DF | 0000FB02 | LATIN SMALL LIGATURE FL + E0 | 00002021 | DOUBLE DAGGER + E1 | 000000B7 | MIDDLE DOT + E2 | 0000201A | SINGLE LOW-9 QUOTATION MARK + E3 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + E4 | 00002030 | PER MILLE SIGN + E5 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + E6 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + E7 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + E8 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + E9 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + EA | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + EB | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + EC | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + ED | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + F0 | 0000E01E | APPLE LOGO (Macintosh_F0) + F1 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + F2 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + F3 | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + F4 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + F5 | 00000131 | LATIN SMALL LETTER DOTLESS I + F6 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + F7 | 000002DC | SMALL TILDE + F8 | 000000AF | MACRON + F9 | 000002D8 | BREVE + FA | 000002D9 | DOT ABOVE (Mandarin Chinese light tone) + FB | 000002DA | RING ABOVE + FC | 000000B8 | CEDILLA + FD | 000002DD | DOUBLE ACUTE ACCENT + FE | 000002DB | OGONEK + FF | 000002C7 | CARON (Mandarin Chinese third tone) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACROMANIA.pm b/lib/Locale/RecodeData/MACROMANIA.pm new file mode 100644 index 0000000..363abad --- /dev/null +++ b/lib/Locale/RecodeData/MACROMANIA.pm @@ -0,0 +1,1138 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACROMANIA. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACROMANIA; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0x00c5, + 0x00c7, + 0x00c9, + 0x00d1, + 0x00d6, + 0x00dc, + 0x00e1, + 0x00e0, + 0x00e2, + 0x00e4, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00ed, + 0x00ec, + 0x00ee, + 0x00ef, + 0x00f1, + 0x00f3, + 0x00f2, + 0x00f4, + 0x00f6, + 0x00f5, + 0x00fa, + 0x00f9, + 0x00fb, + 0x00fc, + 0x2020, + 0x00b0, + 0x00a2, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x00df, + 0x00ae, + 0x00a9, + 0x2122, + 0x00b4, + 0x00a8, + 0x2260, + 0x0102, + 0x015e, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x00a5, + 0x00b5, + 0x2202, + 0x2211, + 0x220f, + 0x03c0, + 0x222b, + 0x00aa, + 0x00ba, + 0x2126, + 0x0103, + 0x015f, + 0x00bf, + 0x00a1, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x2206, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x00c0, + 0x00c3, + 0x00d5, + 0x0152, + 0x0153, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x25ca, + 0x00ff, + 0x0178, + 0x2044, + 0x00a4, + 0x2039, + 0x203a, + 0x0162, + 0x0163, + 0x2021, + 0x00b7, + 0x201a, + 0x201e, + 0x2030, + 0x00c2, + 0x00ca, + 0x00c1, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00d3, + 0x00d4, + 0xfffd, + 0x00d2, + 0x00da, + 0x00db, + 0x00d9, + 0x0131, + 0x02c6, + 0x02dc, + 0x00af, + 0x02d8, + 0x02d9, + 0x02da, + 0x00b8, + 0x02dd, + 0x02db, + 0x02c7, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xc3\x85", + "\xc3\x87", + "\xc3\x89", + "\xc3\x91", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xa1", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xad", + "\xc3\xac", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb1", + "\xc3\xb3", + "\xc3\xb2", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb5", + "\xc3\xba", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xe2\x80\xa0", + "\xc2\xb0", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xc3\x9f", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xc2\xb4", + "\xc2\xa8", + "\xe2\x89\xa0", + "\xc4\x82", + "\xc5\x9e", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xc2\xa5", + "\xc2\xb5", + "\xe2\x88\x82", + "\xe2\x88\x91", + "\xe2\x88\x8f", + "\xcf\x80", + "\xe2\x88\xab", + "\xc2\xaa", + "\xc2\xba", + "\xe2\x84\xa6", + "\xc4\x83", + "\xc5\x9f", + "\xc2\xbf", + "\xc2\xa1", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xe2\x88\x86", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xc3\x80", + "\xc3\x83", + "\xc3\x95", + "\xc5\x92", + "\xc5\x93", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x97\x8a", + "\xc3\xbf", + "\xc5\xb8", + "\xe2\x81\x84", + "\xc2\xa4", + "\xe2\x80\xb9", + "\xe2\x80\xba", + "\xc5\xa2", + "\xc5\xa3", + "\xe2\x80\xa1", + "\xc2\xb7", + "\xe2\x80\x9a", + "\xe2\x80\x9e", + "\xe2\x80\xb0", + "\xc3\x82", + "\xc3\x8a", + "\xc3\x81", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\x93", + "\xc3\x94", + "\xef\xbf\xbd", + "\xc3\x92", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x99", + "\xc4\xb1", + "\xcb\x86", + "\xcb\x9c", + "\xc2\xaf", + "\xcb\x98", + "\xcb\x99", + "\xcb\x9a", + "\xc2\xb8", + "\xcb\x9d", + "\xcb\x9b", + "\xcb\x87", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a1 => "\xc1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xdb", + 0x000000a5 => "\xb4", + 0x000000a7 => "\xa4", + 0x000000a8 => "\xac", + 0x000000a9 => "\xa9", + 0x000000aa => "\xbb", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000af => "\xf8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b4 => "\xab", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000b7 => "\xe1", + 0x000000b8 => "\xfc", + 0x000000ba => "\xbc", + 0x000000bb => "\xc8", + 0x000000bf => "\xc0", + 0x000000c0 => "\xcb", + 0x000000c1 => "\xe7", + 0x000000c2 => "\xe5", + 0x000000c3 => "\xcc", + 0x000000c4 => "\x80", + 0x000000c5 => "\x81", + 0x000000c7 => "\x82", + 0x000000c8 => "\xe9", + 0x000000c9 => "\x83", + 0x000000ca => "\xe6", + 0x000000cb => "\xe8", + 0x000000cc => "\xed", + 0x000000cd => "\xea", + 0x000000ce => "\xeb", + 0x000000cf => "\xec", + 0x000000d1 => "\x84", + 0x000000d2 => "\xf1", + 0x000000d3 => "\xee", + 0x000000d4 => "\xef", + 0x000000d5 => "\xcd", + 0x000000d6 => "\x85", + 0x000000d9 => "\xf4", + 0x000000da => "\xf2", + 0x000000db => "\xf3", + 0x000000dc => "\x86", + 0x000000df => "\xa7", + 0x000000e0 => "\x88", + 0x000000e1 => "\x87", + 0x000000e2 => "\x89", + 0x000000e3 => "\x8b", + 0x000000e4 => "\x8a", + 0x000000e5 => "\x8c", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ec => "\x93", + 0x000000ed => "\x92", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f1 => "\x96", + 0x000000f2 => "\x98", + 0x000000f3 => "\x97", + 0x000000f4 => "\x99", + 0x000000f5 => "\x9b", + 0x000000f6 => "\x9a", + 0x000000f7 => "\xd6", + 0x000000f9 => "\x9d", + 0x000000fa => "\x9c", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x000000ff => "\xd8", + 0x00000102 => "\xae", + 0x00000103 => "\xbe", + 0x00000131 => "\xf5", + 0x00000152 => "\xce", + 0x00000153 => "\xcf", + 0x0000015e => "\xaf", + 0x0000015f => "\xbf", + 0x00000162 => "\xde", + 0x00000163 => "\xdf", + 0x00000178 => "\xd9", + 0x00000192 => "\xc4", + 0x000002c6 => "\xf6", + 0x000002c7 => "\xff", + 0x000002d8 => "\xf9", + 0x000002d9 => "\xfa", + 0x000002da => "\xfb", + 0x000002db => "\xfe", + 0x000002dc => "\xf7", + 0x000002dd => "\xfd", + 0x000003c0 => "\xb9", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201a => "\xe2", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xe3", + 0x00002020 => "\xa0", + 0x00002021 => "\xe0", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002030 => "\xe4", + 0x00002039 => "\xdc", + 0x0000203a => "\xdd", + 0x00002044 => "\xda", + 0x00002122 => "\xaa", + 0x00002126 => "\xbd", + 0x00002202 => "\xb6", + 0x00002206 => "\xc6", + 0x0000220f => "\xb8", + 0x00002211 => "\xb7", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x0000222b => "\xba", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", + 0x000025ca => "\xd7", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACROMANIA - Conversion routines for MACROMANIA + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACROMANIA. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 82 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 8C | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 93 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 97 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + 98 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 9C | 000000FA | LATIN SMALL LETTER U WITH ACUTE + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A0 | 00002020 | DAGGER + A1 | 000000B0 | DEGREE SIGN + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 000000DF | LATIN SMALL LETTER SHARP S + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 000000B4 | ACUTE ACCENT + AC | 000000A8 | DIAERESIS + AD | 00002260 | NOT EQUAL TO + AE | 00000102 | LATIN CAPITAL LETTER A WITH BREVE + AF | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 000000A5 | YEN SIGN + B5 | 000000B5 | MICRO SIGN + B6 | 00002202 | PARTIAL DIFFERENTIAL + B7 | 00002211 | N-ARY SUMMATION + B8 | 0000220F | N-ARY PRODUCT + B9 | 000003C0 | GREEK SMALL LETTER PI + BA | 0000222B | INTEGRAL + BB | 000000AA | FEMININE ORDINAL INDICATOR + BC | 000000BA | MASCULINE ORDINAL INDICATOR + BD | 00002126 | OHM SIGN + BE | 00000103 | LATIN SMALL LETTER A WITH BREVE + BF | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + C0 | 000000BF | INVERTED QUESTION MARK + C1 | 000000A1 | INVERTED EXCLAMATION MARK + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00002206 | INCREMENT + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + CC | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + CD | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + CE | 00000152 | LATIN CAPITAL LIGATURE OE + CF | 00000153 | LATIN SMALL LIGATURE OE + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 000025CA | LOZENGE + D8 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + D9 | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + DA | 00002044 | FRACTION SLASH + DB | 000000A4 | CURRENCY SIGN + DC | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + DD | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + DE | 00000162 | LATIN CAPITAL LETTER T WITH CEDILLA + DF | 00000163 | LATIN SMALL LETTER T WITH CEDILLA + E0 | 00002021 | DOUBLE DAGGER + E1 | 000000B7 | MIDDLE DOT + E2 | 0000201A | SINGLE LOW-9 QUOTATION MARK + E3 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + E4 | 00002030 | PER MILLE SIGN + E5 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + E6 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + E7 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + E8 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + E9 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + EA | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + EB | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + EC | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + ED | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + F1 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + F2 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + F3 | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + F4 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + F5 | 00000131 | LATIN SMALL LETTER DOTLESS I + F6 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + F7 | 000002DC | SMALL TILDE + F8 | 000000AF | MACRON + F9 | 000002D8 | BREVE + FA | 000002D9 | DOT ABOVE + FB | 000002DA | RING ABOVE + FC | 000000B8 | CEDILLA + FD | 000002DD | DOUBLE ACUTE ACCENT + FE | 000002DB | OGONEK + FF | 000002C7 | CARON + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACTHAI.pm b/lib/Locale/RecodeData/MACTHAI.pm new file mode 100644 index 0000000..9237fc4 --- /dev/null +++ b/lib/Locale/RecodeData/MACTHAI.pm @@ -0,0 +1,1128 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACTHAI. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACTHAI; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00ab, + 0x00bb, + 0x2026, + 0xf88c, + 0xf88f, + 0xf892, + 0xf895, + 0xf898, + 0xf88b, + 0xf88e, + 0xf891, + 0xf894, + 0xf897, + 0x201c, + 0x201d, + 0xf899, + 0xfffd, + 0x2022, + 0xf884, + 0xf889, + 0xf885, + 0xf886, + 0xf887, + 0xf888, + 0xf88a, + 0xf88d, + 0xf890, + 0xf893, + 0xf896, + 0x2018, + 0x2019, + 0xfffd, + 0x00a0, + 0x0e01, + 0x0e02, + 0x0e03, + 0x0e04, + 0x0e05, + 0x0e06, + 0x0e07, + 0x0e08, + 0x0e09, + 0x0e0a, + 0x0e0b, + 0x0e0c, + 0x0e0d, + 0x0e0e, + 0x0e0f, + 0x0e10, + 0x0e11, + 0x0e12, + 0x0e13, + 0x0e14, + 0x0e15, + 0x0e16, + 0x0e17, + 0x0e18, + 0x0e19, + 0x0e1a, + 0x0e1b, + 0x0e1c, + 0x0e1d, + 0x0e1e, + 0x0e1f, + 0x0e20, + 0x0e21, + 0x0e22, + 0x0e23, + 0x0e24, + 0x0e25, + 0x0e26, + 0x0e27, + 0x0e28, + 0x0e29, + 0x0e2a, + 0x0e2b, + 0x0e2c, + 0x0e2d, + 0x0e2e, + 0x0e2f, + 0x0e30, + 0x0e31, + 0x0e32, + 0x0e33, + 0x0e34, + 0x0e35, + 0x0e36, + 0x0e37, + 0x0e38, + 0x0e39, + 0x0e3a, + 0xfeff, + 0x200b, + 0x2013, + 0x2014, + 0x0e3f, + 0x0e40, + 0x0e41, + 0x0e42, + 0x0e43, + 0x0e44, + 0x0e45, + 0x0e46, + 0x0e47, + 0x0e48, + 0x0e49, + 0x0e4a, + 0x0e4b, + 0x0e4c, + 0x0e4d, + 0x2122, + 0x0e4f, + 0x0e50, + 0x0e51, + 0x0e52, + 0x0e53, + 0x0e54, + 0x0e55, + 0x0e56, + 0x0e57, + 0x0e58, + 0x0e59, + 0x00ae, + 0x00a9, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xef\xa2\x8c", + "\xef\xa2\x8f", + "\xef\xa2\x92", + "\xef\xa2\x95", + "\xef\xa2\x98", + "\xef\xa2\x8b", + "\xef\xa2\x8e", + "\xef\xa2\x91", + "\xef\xa2\x94", + "\xef\xa2\x97", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xef\xa2\x99", + "\xef\xbf\xbd", + "\xe2\x80\xa2", + "\xef\xa2\x84", + "\xef\xa2\x89", + "\xef\xa2\x85", + "\xef\xa2\x86", + "\xef\xa2\x87", + "\xef\xa2\x88", + "\xef\xa2\x8a", + "\xef\xa2\x8d", + "\xef\xa2\x90", + "\xef\xa2\x93", + "\xef\xa2\x96", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xef\xbf\xbd", + "\xc2\xa0", + "\xe0\xb8\x81", + "\xe0\xb8\x82", + "\xe0\xb8\x83", + "\xe0\xb8\x84", + "\xe0\xb8\x85", + "\xe0\xb8\x86", + "\xe0\xb8\x87", + "\xe0\xb8\x88", + "\xe0\xb8\x89", + "\xe0\xb8\x8a", + "\xe0\xb8\x8b", + "\xe0\xb8\x8c", + "\xe0\xb8\x8d", + "\xe0\xb8\x8e", + "\xe0\xb8\x8f", + "\xe0\xb8\x90", + "\xe0\xb8\x91", + "\xe0\xb8\x92", + "\xe0\xb8\x93", + "\xe0\xb8\x94", + "\xe0\xb8\x95", + "\xe0\xb8\x96", + "\xe0\xb8\x97", + "\xe0\xb8\x98", + "\xe0\xb8\x99", + "\xe0\xb8\x9a", + "\xe0\xb8\x9b", + "\xe0\xb8\x9c", + "\xe0\xb8\x9d", + "\xe0\xb8\x9e", + "\xe0\xb8\x9f", + "\xe0\xb8\xa0", + "\xe0\xb8\xa1", + "\xe0\xb8\xa2", + "\xe0\xb8\xa3", + "\xe0\xb8\xa4", + "\xe0\xb8\xa5", + "\xe0\xb8\xa6", + "\xe0\xb8\xa7", + "\xe0\xb8\xa8", + "\xe0\xb8\xa9", + "\xe0\xb8\xaa", + "\xe0\xb8\xab", + "\xe0\xb8\xac", + "\xe0\xb8\xad", + "\xe0\xb8\xae", + "\xe0\xb8\xaf", + "\xe0\xb8\xb0", + "\xe0\xb8\xb1", + "\xe0\xb8\xb2", + "\xe0\xb8\xb3", + "\xe0\xb8\xb4", + "\xe0\xb8\xb5", + "\xe0\xb8\xb6", + "\xe0\xb8\xb7", + "\xe0\xb8\xb8", + "\xe0\xb8\xb9", + "\xe0\xb8\xba", + "\xef\xbb\xbf", + "\xe2\x80\x8b", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe0\xb8\xbf", + "\xe0\xb9\x80", + "\xe0\xb9\x81", + "\xe0\xb9\x82", + "\xe0\xb9\x83", + "\xe0\xb9\x84", + "\xe0\xb9\x85", + "\xe0\xb9\x86", + "\xe0\xb9\x87", + "\xe0\xb9\x88", + "\xe0\xb9\x89", + "\xe0\xb9\x8a", + "\xe0\xb9\x8b", + "\xe0\xb9\x8c", + "\xe0\xb9\x8d", + "\xe2\x84\xa2", + "\xe0\xb9\x8f", + "\xe0\xb9\x90", + "\xe0\xb9\x91", + "\xe0\xb9\x92", + "\xe0\xb9\x93", + "\xe0\xb9\x94", + "\xe0\xb9\x95", + "\xe0\xb9\x96", + "\xe0\xb9\x97", + "\xe0\xb9\x98", + "\xe0\xb9\x99", + "\xc2\xae", + "\xc2\xa9", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a9 => "\xfb", + 0x000000ab => "\x80", + 0x000000ae => "\xfa", + 0x000000bb => "\x81", + 0x00000e01 => "\xa1", + 0x00000e02 => "\xa2", + 0x00000e03 => "\xa3", + 0x00000e04 => "\xa4", + 0x00000e05 => "\xa5", + 0x00000e06 => "\xa6", + 0x00000e07 => "\xa7", + 0x00000e08 => "\xa8", + 0x00000e09 => "\xa9", + 0x00000e0a => "\xaa", + 0x00000e0b => "\xab", + 0x00000e0c => "\xac", + 0x00000e0d => "\xad", + 0x00000e0e => "\xae", + 0x00000e0f => "\xaf", + 0x00000e10 => "\xb0", + 0x00000e11 => "\xb1", + 0x00000e12 => "\xb2", + 0x00000e13 => "\xb3", + 0x00000e14 => "\xb4", + 0x00000e15 => "\xb5", + 0x00000e16 => "\xb6", + 0x00000e17 => "\xb7", + 0x00000e18 => "\xb8", + 0x00000e19 => "\xb9", + 0x00000e1a => "\xba", + 0x00000e1b => "\xbb", + 0x00000e1c => "\xbc", + 0x00000e1d => "\xbd", + 0x00000e1e => "\xbe", + 0x00000e1f => "\xbf", + 0x00000e20 => "\xc0", + 0x00000e21 => "\xc1", + 0x00000e22 => "\xc2", + 0x00000e23 => "\xc3", + 0x00000e24 => "\xc4", + 0x00000e25 => "\xc5", + 0x00000e26 => "\xc6", + 0x00000e27 => "\xc7", + 0x00000e28 => "\xc8", + 0x00000e29 => "\xc9", + 0x00000e2a => "\xca", + 0x00000e2b => "\xcb", + 0x00000e2c => "\xcc", + 0x00000e2d => "\xcd", + 0x00000e2e => "\xce", + 0x00000e2f => "\xcf", + 0x00000e30 => "\xd0", + 0x00000e31 => "\xd1", + 0x00000e32 => "\xd2", + 0x00000e33 => "\xd3", + 0x00000e34 => "\xd4", + 0x00000e35 => "\xd5", + 0x00000e36 => "\xd6", + 0x00000e37 => "\xd7", + 0x00000e38 => "\xd8", + 0x00000e39 => "\xd9", + 0x00000e3a => "\xda", + 0x00000e3f => "\xdf", + 0x00000e40 => "\xe0", + 0x00000e41 => "\xe1", + 0x00000e42 => "\xe2", + 0x00000e43 => "\xe3", + 0x00000e44 => "\xe4", + 0x00000e45 => "\xe5", + 0x00000e46 => "\xe6", + 0x00000e47 => "\xe7", + 0x00000e48 => "\xe8", + 0x00000e49 => "\xe9", + 0x00000e4a => "\xea", + 0x00000e4b => "\xeb", + 0x00000e4c => "\xec", + 0x00000e4d => "\xed", + 0x00000e4f => "\xef", + 0x00000e50 => "\xf0", + 0x00000e51 => "\xf1", + 0x00000e52 => "\xf2", + 0x00000e53 => "\xf3", + 0x00000e54 => "\xf4", + 0x00000e55 => "\xf5", + 0x00000e56 => "\xf6", + 0x00000e57 => "\xf7", + 0x00000e58 => "\xf8", + 0x00000e59 => "\xf9", + 0x0000200b => "\xdc", + 0x00002013 => "\xdd", + 0x00002014 => "\xde", + 0x00002018 => "\x9d", + 0x00002019 => "\x9e", + 0x0000201c => "\x8d", + 0x0000201d => "\x8e", + 0x00002022 => "\x91", + 0x00002026 => "\x82", + 0x00002122 => "\xee", + 0x0000f884 => "\x92", + 0x0000f885 => "\x94", + 0x0000f886 => "\x95", + 0x0000f887 => "\x96", + 0x0000f888 => "\x97", + 0x0000f889 => "\x93", + 0x0000f88a => "\x98", + 0x0000f88b => "\x88", + 0x0000f88c => "\x83", + 0x0000f88d => "\x99", + 0x0000f88e => "\x89", + 0x0000f88f => "\x84", + 0x0000f890 => "\x9a", + 0x0000f891 => "\x8a", + 0x0000f892 => "\x85", + 0x0000f893 => "\x9b", + 0x0000f894 => "\x8b", + 0x0000f895 => "\x86", + 0x0000f896 => "\x9c", + 0x0000f897 => "\x8c", + 0x0000f898 => "\x87", + 0x0000f899 => "\x8f", + 0x0000feff => "\xdb", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACTHAI - Conversion routines for MACTHAI + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACTHAI. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 81 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 82 | 00002026 | HORIZONTAL ELLIPSIS + 83 | 0000F88C | ECJKE + 84 | 0000F88F | ECJKE + 85 | 0000F892 | ECJKE + 86 | 0000F895 | ECJKE + 87 | 0000F898 | ECJKE + 88 | 0000F88B | ECJKE + 89 | 0000F88E | ECJKE + 8A | 0000F891 | ECJKE + 8B | 0000F894 | ECJKE + 8C | 0000F897 | ECJKE + 8D | 0000201C | LEFT DOUBLE QUOTATION MARK + 8E | 0000201D | RIGHT DOUBLE QUOTATION MARK + 8F | 0000F899 | ECJKE + 91 | 00002022 | BULLET + 92 | 0000F884 | ECJKE + 93 | 0000F889 | ECJKE + 94 | 0000F885 | ECJKE + 95 | 0000F886 | ECJKE + 96 | 0000F887 | ECJKE + 97 | 0000F888 | ECJKE + 98 | 0000F88A | ECJKE + 99 | 0000F88D | ECJKE + 9A | 0000F890 | ECJKE + 9B | 0000F893 | ECJKE + 9C | 0000F896 | ECJKE + 9D | 00002018 | LEFT SINGLE QUOTATION MARK + 9E | 00002019 | RIGHT SINGLE QUOTATION MARK + A0 | 000000A0 | NO-BREAK SPACE + A1 | 00000E01 | THAI CHARACTER KO KAI + A2 | 00000E02 | THAI CHARACTER KHO KHAI + A3 | 00000E03 | THAI CHARACTER KHO KHUAT + A4 | 00000E04 | THAI CHARACTER KHO KHWAI + A5 | 00000E05 | THAI CHARACTER KHO KHON + A6 | 00000E06 | THAI CHARACTER KHO RAKHANG + A7 | 00000E07 | THAI CHARACTER NGO NGU + A8 | 00000E08 | THAI CHARACTER CHO CHAN + A9 | 00000E09 | THAI CHARACTER CHO CHING + AA | 00000E0A | THAI CHARACTER CHO CHANG + AB | 00000E0B | THAI CHARACTER SO SO + AC | 00000E0C | THAI CHARACTER CHO CHOE + AD | 00000E0D | THAI CHARACTER YO YING + AE | 00000E0E | THAI CHARACTER DO CHADA + AF | 00000E0F | THAI CHARACTER TO PATAK + B0 | 00000E10 | THAI CHARACTER THO THAN + B1 | 00000E11 | THAI CHARACTER THO NANGMONTHO + B2 | 00000E12 | THAI CHARACTER THO PHUTHAO + B3 | 00000E13 | THAI CHARACTER NO NEN + B4 | 00000E14 | THAI CHARACTER DO DEK + B5 | 00000E15 | THAI CHARACTER TO TAO + B6 | 00000E16 | THAI CHARACTER THO THUNG + B7 | 00000E17 | THAI CHARACTER THO THAHAN + B8 | 00000E18 | THAI CHARACTER THO THONG + B9 | 00000E19 | THAI CHARACTER NO NU + BA | 00000E1A | THAI CHARACTER BO BAIMAI + BB | 00000E1B | THAI CHARACTER PO PLA + BC | 00000E1C | THAI CHARACTER PHO PHUNG + BD | 00000E1D | THAI CHARACTER FO FA + BE | 00000E1E | THAI CHARACTER PHO PHAN + BF | 00000E1F | THAI CHARACTER FO FAN + C0 | 00000E20 | THAI CHARACTER PHO SAMPHAO + C1 | 00000E21 | THAI CHARACTER MO MA + C2 | 00000E22 | THAI CHARACTER YO YAK + C3 | 00000E23 | THAI CHARACTER RO RUA + C4 | 00000E24 | THAI CHARACTER RU + C5 | 00000E25 | THAI CHARACTER LO LING + C6 | 00000E26 | THAI CHARACTER LU + C7 | 00000E27 | THAI CHARACTER WO WAEN + C8 | 00000E28 | THAI CHARACTER SO SALA + C9 | 00000E29 | THAI CHARACTER SO RUSI + CA | 00000E2A | THAI CHARACTER SO SUA + CB | 00000E2B | THAI CHARACTER HO HIP + CC | 00000E2C | THAI CHARACTER LO CHULA + CD | 00000E2D | THAI CHARACTER O ANG + CE | 00000E2E | THAI CHARACTER HO NOKHUK + CF | 00000E2F | THAI CHARACTER PAIYANNOI + D0 | 00000E30 | THAI CHARACTER SARA A + D1 | 00000E31 | THAI CHARACTER MAI HAN-AKAT + D2 | 00000E32 | THAI CHARACTER SARA AA + D3 | 00000E33 | THAI CHARACTER SARA AM + D4 | 00000E34 | THAI CHARACTER SARA I + D5 | 00000E35 | THAI CHARACTER SARA II + D6 | 00000E36 | THAI CHARACTER SARA UE + D7 | 00000E37 | THAI CHARACTER SARA UEE + D8 | 00000E38 | THAI CHARACTER SARA U + D9 | 00000E39 | THAI CHARACTER SARA UU + DA | 00000E3A | THAI CHARACTER PHINTHU + DB | 0000FEFF | ZERO WIDTH NO-BREAK SPACE + DC | 0000200B | ZERO WIDTH SPACE + DD | 00002013 | EN DASH + DE | 00002014 | EM DASH + DF | 00000E3F | THAI CURRENCY SYMBOL BAHT + E0 | 00000E40 | THAI CHARACTER SARA E + E1 | 00000E41 | THAI CHARACTER SARA AE + E2 | 00000E42 | THAI CHARACTER SARA O + E3 | 00000E43 | THAI CHARACTER SARA AI MAIMUAN + E4 | 00000E44 | THAI CHARACTER SARA AI MAIMALAI + E5 | 00000E45 | THAI CHARACTER LAKKHANGYAO + E6 | 00000E46 | THAI CHARACTER MAIYAMOK + E7 | 00000E47 | THAI CHARACTER MAITAIKHU + E8 | 00000E48 | THAI CHARACTER MAI EK + E9 | 00000E49 | THAI CHARACTER MAI THO + EA | 00000E4A | THAI CHARACTER MAI TRI + EB | 00000E4B | THAI CHARACTER MAI CHATTAWA + EC | 00000E4C | THAI CHARACTER THANTHAKHAT + ED | 00000E4D | THAI CHARACTER NIKHAHIT + EE | 00002122 | TRADE MARK SIGN + EF | 00000E4F | THAI CHARACTER FONGMAN + F0 | 00000E50 | THAI DIGIT ZERO + F1 | 00000E51 | THAI DIGIT ONE + F2 | 00000E52 | THAI DIGIT TWO + F3 | 00000E53 | THAI DIGIT THREE + F4 | 00000E54 | THAI DIGIT FOUR + F5 | 00000E55 | THAI DIGIT FIVE + F6 | 00000E56 | THAI DIGIT SIX + F7 | 00000E57 | THAI DIGIT SEVEN + F8 | 00000E58 | THAI DIGIT EIGHT + F9 | 00000E59 | THAI DIGIT NINE + FA | 000000AE | REGISTERED SIGN + FB | 000000A9 | COPYRIGHT SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACTURKISH.pm b/lib/Locale/RecodeData/MACTURKISH.pm new file mode 100644 index 0000000..716940c --- /dev/null +++ b/lib/Locale/RecodeData/MACTURKISH.pm @@ -0,0 +1,1136 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACTURKISH. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACTURKISH; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0x00c5, + 0x00c7, + 0x00c9, + 0x00d1, + 0x00d6, + 0x00dc, + 0x00e1, + 0x00e0, + 0x00e2, + 0x00e4, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00ed, + 0x00ec, + 0x00ee, + 0x00ef, + 0x00f1, + 0x00f3, + 0x00f2, + 0x00f4, + 0x00f6, + 0x00f5, + 0x00fa, + 0x00f9, + 0x00fb, + 0x00fc, + 0x2020, + 0x00b0, + 0x00a2, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x00df, + 0x00ae, + 0x00a9, + 0x2122, + 0x00b4, + 0x00a8, + 0x2260, + 0x00c6, + 0x00d8, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x00a5, + 0x00b5, + 0x2202, + 0x2211, + 0x220f, + 0x03c0, + 0x222b, + 0x00aa, + 0x00ba, + 0x2126, + 0x00e6, + 0x00f8, + 0x00bf, + 0x00a1, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x2206, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x00c0, + 0x00c3, + 0x00d5, + 0x0152, + 0x0153, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x25ca, + 0x00ff, + 0x0178, + 0x011e, + 0x011f, + 0x0130, + 0x0131, + 0x015e, + 0x015f, + 0x2021, + 0x00b7, + 0x201a, + 0x201e, + 0x2030, + 0x00c2, + 0x00ca, + 0x00c1, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00d3, + 0x00d4, + 0xfffd, + 0x00d2, + 0x00da, + 0x00db, + 0x00d9, + 0xfffd, + 0x02c6, + 0x02dc, + 0x00af, + 0x02d8, + 0x02d9, + 0x02da, + 0x00b8, + 0x02dd, + 0x02db, + 0x02c7, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xc3\x85", + "\xc3\x87", + "\xc3\x89", + "\xc3\x91", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xa1", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xad", + "\xc3\xac", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb1", + "\xc3\xb3", + "\xc3\xb2", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb5", + "\xc3\xba", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xe2\x80\xa0", + "\xc2\xb0", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xc3\x9f", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xc2\xb4", + "\xc2\xa8", + "\xe2\x89\xa0", + "\xc3\x86", + "\xc3\x98", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xc2\xa5", + "\xc2\xb5", + "\xe2\x88\x82", + "\xe2\x88\x91", + "\xe2\x88\x8f", + "\xcf\x80", + "\xe2\x88\xab", + "\xc2\xaa", + "\xc2\xba", + "\xe2\x84\xa6", + "\xc3\xa6", + "\xc3\xb8", + "\xc2\xbf", + "\xc2\xa1", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xe2\x88\x86", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xc3\x80", + "\xc3\x83", + "\xc3\x95", + "\xc5\x92", + "\xc5\x93", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x97\x8a", + "\xc3\xbf", + "\xc5\xb8", + "\xc4\x9e", + "\xc4\x9f", + "\xc4\xb0", + "\xc4\xb1", + "\xc5\x9e", + "\xc5\x9f", + "\xe2\x80\xa1", + "\xc2\xb7", + "\xe2\x80\x9a", + "\xe2\x80\x9e", + "\xe2\x80\xb0", + "\xc3\x82", + "\xc3\x8a", + "\xc3\x81", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\x93", + "\xc3\x94", + "\xef\xbf\xbd", + "\xc3\x92", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x99", + "\xef\xbf\xbd", + "\xcb\x86", + "\xcb\x9c", + "\xc2\xaf", + "\xcb\x98", + "\xcb\x99", + "\xcb\x9a", + "\xc2\xb8", + "\xcb\x9d", + "\xcb\x9b", + "\xcb\x87", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a1 => "\xc1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a5 => "\xb4", + 0x000000a7 => "\xa4", + 0x000000a8 => "\xac", + 0x000000a9 => "\xa9", + 0x000000aa => "\xbb", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000af => "\xf8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b4 => "\xab", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000b7 => "\xe1", + 0x000000b8 => "\xfc", + 0x000000ba => "\xbc", + 0x000000bb => "\xc8", + 0x000000bf => "\xc0", + 0x000000c0 => "\xcb", + 0x000000c1 => "\xe7", + 0x000000c2 => "\xe5", + 0x000000c3 => "\xcc", + 0x000000c4 => "\x80", + 0x000000c5 => "\x81", + 0x000000c6 => "\xae", + 0x000000c7 => "\x82", + 0x000000c8 => "\xe9", + 0x000000c9 => "\x83", + 0x000000ca => "\xe6", + 0x000000cb => "\xe8", + 0x000000cc => "\xed", + 0x000000cd => "\xea", + 0x000000ce => "\xeb", + 0x000000cf => "\xec", + 0x000000d1 => "\x84", + 0x000000d2 => "\xf1", + 0x000000d3 => "\xee", + 0x000000d4 => "\xef", + 0x000000d5 => "\xcd", + 0x000000d6 => "\x85", + 0x000000d8 => "\xaf", + 0x000000d9 => "\xf4", + 0x000000da => "\xf2", + 0x000000db => "\xf3", + 0x000000dc => "\x86", + 0x000000df => "\xa7", + 0x000000e0 => "\x88", + 0x000000e1 => "\x87", + 0x000000e2 => "\x89", + 0x000000e3 => "\x8b", + 0x000000e4 => "\x8a", + 0x000000e5 => "\x8c", + 0x000000e6 => "\xbe", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ec => "\x93", + 0x000000ed => "\x92", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f1 => "\x96", + 0x000000f2 => "\x98", + 0x000000f3 => "\x97", + 0x000000f4 => "\x99", + 0x000000f5 => "\x9b", + 0x000000f6 => "\x9a", + 0x000000f7 => "\xd6", + 0x000000f8 => "\xbf", + 0x000000f9 => "\x9d", + 0x000000fa => "\x9c", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x000000ff => "\xd8", + 0x0000011e => "\xda", + 0x0000011f => "\xdb", + 0x00000130 => "\xdc", + 0x00000131 => "\xdd", + 0x00000152 => "\xce", + 0x00000153 => "\xcf", + 0x0000015e => "\xde", + 0x0000015f => "\xdf", + 0x00000178 => "\xd9", + 0x00000192 => "\xc4", + 0x000002c6 => "\xf6", + 0x000002c7 => "\xff", + 0x000002d8 => "\xf9", + 0x000002d9 => "\xfa", + 0x000002da => "\xfb", + 0x000002db => "\xfe", + 0x000002dc => "\xf7", + 0x000002dd => "\xfd", + 0x000003c0 => "\xb9", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201a => "\xe2", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xe3", + 0x00002020 => "\xa0", + 0x00002021 => "\xe0", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002030 => "\xe4", + 0x00002122 => "\xaa", + 0x00002126 => "\xbd", + 0x00002202 => "\xb6", + 0x00002206 => "\xc6", + 0x0000220f => "\xb8", + 0x00002211 => "\xb7", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x0000222b => "\xba", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", + 0x000025ca => "\xd7", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACTURKISH - Conversion routines for MACTURKISH + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACTURKISH. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 82 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 8C | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 93 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 97 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + 98 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 9C | 000000FA | LATIN SMALL LETTER U WITH ACUTE + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A0 | 00002020 | DAGGER + A1 | 000000B0 | DEGREE SIGN + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 000000DF | LATIN SMALL LETTER SHARP S + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 000000B4 | ACUTE ACCENT + AC | 000000A8 | DIAERESIS + AD | 00002260 | NOT EQUAL TO + AE | 000000C6 | LATIN CAPITAL LETTER AE + AF | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 000000A5 | YEN SIGN + B5 | 000000B5 | MICRO SIGN + B6 | 00002202 | PARTIAL DIFFERENTIAL + B7 | 00002211 | N-ARY SUMMATION + B8 | 0000220F | N-ARY PRODUCT + B9 | 000003C0 | GREEK SMALL LETTER PI + BA | 0000222B | INTEGRAL + BB | 000000AA | FEMININE ORDINAL INDICATOR + BC | 000000BA | MASCULINE ORDINAL INDICATOR + BD | 00002126 | OHM SIGN + BE | 000000E6 | LATIN SMALL LETTER AE + BF | 000000F8 | LATIN SMALL LETTER O WITH STROKE + C0 | 000000BF | INVERTED QUESTION MARK + C1 | 000000A1 | INVERTED EXCLAMATION MARK + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00002206 | INCREMENT + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + CC | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + CD | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + CE | 00000152 | LATIN CAPITAL LIGATURE OE + CF | 00000153 | LATIN SMALL LIGATURE OE + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 000025CA | LOZENGE + D8 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + D9 | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + DA | 0000011E | LATIN CAPITAL LETTER G WITH BREVE + DB | 0000011F | LATIN SMALL LETTER G WITH BREVE + DC | 00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE + DD | 00000131 | LATIN SMALL LETTER DOTLESS I + DE | 0000015E | LATIN CAPITAL LETTER S WITH CEDILLA + DF | 0000015F | LATIN SMALL LETTER S WITH CEDILLA + E0 | 00002021 | DOUBLE DAGGER + E1 | 000000B7 | MIDDLE DOT + E2 | 0000201A | SINGLE LOW-9 QUOTATION MARK + E3 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + E4 | 00002030 | PER MILLE SIGN + E5 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + E6 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + E7 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + E8 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + E9 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + EA | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + EB | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + EC | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + ED | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + F1 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + F2 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + F3 | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + F4 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + F6 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + F7 | 000002DC | SMALL TILDE + F8 | 000000AF | MACRON + F9 | 000002D8 | BREVE + FA | 000002D9 | DOT ABOVE + FB | 000002DA | RING ABOVE + FC | 000000B8 | CEDILLA + FD | 000002DD | DOUBLE ACUTE ACCENT + FE | 000002DB | OGONEK + FF | 000002C7 | CARON + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MACUKRAINE.pm b/lib/Locale/RecodeData/MACUKRAINE.pm new file mode 100644 index 0000000..4d33f69 --- /dev/null +++ b/lib/Locale/RecodeData/MACUKRAINE.pm @@ -0,0 +1,1140 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MACUKRAINE. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MACUKRAINE; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x2020, + 0x00b0, + 0x0490, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x0406, + 0x00ae, + 0x00a9, + 0x2122, + 0x0402, + 0x0452, + 0x2260, + 0x0403, + 0x0453, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x0456, + 0x00b5, + 0x0491, + 0x0408, + 0x0404, + 0x0454, + 0x0407, + 0x0457, + 0x0409, + 0x0459, + 0x040a, + 0x045a, + 0x0458, + 0x0405, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x2206, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x040b, + 0x045b, + 0x040c, + 0x045c, + 0x0455, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x201e, + 0x040e, + 0x045e, + 0x040f, + 0x045f, + 0x2116, + 0x0401, + 0x0451, + 0x044f, + 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, + 0x00a4, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd0\x90", + "\xd0\x91", + "\xd0\x92", + "\xd0\x93", + "\xd0\x94", + "\xd0\x95", + "\xd0\x96", + "\xd0\x97", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\xa4", + "\xd0\xa5", + "\xd0\xa6", + "\xd0\xa7", + "\xd0\xa8", + "\xd0\xa9", + "\xd0\xaa", + "\xd0\xab", + "\xd0\xac", + "\xd0\xad", + "\xd0\xae", + "\xd0\xaf", + "\xe2\x80\xa0", + "\xc2\xb0", + "\xd2\x90", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xd0\x86", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xd0\x82", + "\xd1\x92", + "\xe2\x89\xa0", + "\xd0\x83", + "\xd1\x93", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xd1\x96", + "\xc2\xb5", + "\xd2\x91", + "\xd0\x88", + "\xd0\x84", + "\xd1\x94", + "\xd0\x87", + "\xd1\x97", + "\xd0\x89", + "\xd1\x99", + "\xd0\x8a", + "\xd1\x9a", + "\xd1\x98", + "\xd0\x85", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xe2\x88\x86", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xd0\x8b", + "\xd1\x9b", + "\xd0\x8c", + "\xd1\x9c", + "\xd1\x95", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x80\x9e", + "\xd0\x8e", + "\xd1\x9e", + "\xd0\x8f", + "\xd1\x9f", + "\xe2\x84\x96", + "\xd0\x81", + "\xd1\x91", + "\xd1\x8f", + "\xd0\xb0", + "\xd0\xb1", + "\xd0\xb2", + "\xd0\xb3", + "\xd0\xb4", + "\xd0\xb5", + "\xd0\xb6", + "\xd0\xb7", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd1\x84", + "\xd1\x85", + "\xd1\x86", + "\xd1\x87", + "\xd1\x88", + "\xd1\x89", + "\xd1\x8a", + "\xd1\x8b", + "\xd1\x8c", + "\xd1\x8d", + "\xd1\x8e", + "\xc2\xa4", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xff", + 0x000000a7 => "\xa4", + 0x000000a9 => "\xa9", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000bb => "\xc8", + 0x000000f7 => "\xd6", + 0x00000192 => "\xc4", + 0x00000401 => "\xdd", + 0x00000402 => "\xab", + 0x00000403 => "\xae", + 0x00000404 => "\xb8", + 0x00000405 => "\xc1", + 0x00000406 => "\xa7", + 0x00000407 => "\xba", + 0x00000408 => "\xb7", + 0x00000409 => "\xbc", + 0x0000040a => "\xbe", + 0x0000040b => "\xcb", + 0x0000040c => "\xcd", + 0x0000040e => "\xd8", + 0x0000040f => "\xda", + 0x00000410 => "\x80", + 0x00000411 => "\x81", + 0x00000412 => "\x82", + 0x00000413 => "\x83", + 0x00000414 => "\x84", + 0x00000415 => "\x85", + 0x00000416 => "\x86", + 0x00000417 => "\x87", + 0x00000418 => "\x88", + 0x00000419 => "\x89", + 0x0000041a => "\x8a", + 0x0000041b => "\x8b", + 0x0000041c => "\x8c", + 0x0000041d => "\x8d", + 0x0000041e => "\x8e", + 0x0000041f => "\x8f", + 0x00000420 => "\x90", + 0x00000421 => "\x91", + 0x00000422 => "\x92", + 0x00000423 => "\x93", + 0x00000424 => "\x94", + 0x00000425 => "\x95", + 0x00000426 => "\x96", + 0x00000427 => "\x97", + 0x00000428 => "\x98", + 0x00000429 => "\x99", + 0x0000042a => "\x9a", + 0x0000042b => "\x9b", + 0x0000042c => "\x9c", + 0x0000042d => "\x9d", + 0x0000042e => "\x9e", + 0x0000042f => "\x9f", + 0x00000430 => "\xe0", + 0x00000431 => "\xe1", + 0x00000432 => "\xe2", + 0x00000433 => "\xe3", + 0x00000434 => "\xe4", + 0x00000435 => "\xe5", + 0x00000436 => "\xe6", + 0x00000437 => "\xe7", + 0x00000438 => "\xe8", + 0x00000439 => "\xe9", + 0x0000043a => "\xea", + 0x0000043b => "\xeb", + 0x0000043c => "\xec", + 0x0000043d => "\xed", + 0x0000043e => "\xee", + 0x0000043f => "\xef", + 0x00000440 => "\xf0", + 0x00000441 => "\xf1", + 0x00000442 => "\xf2", + 0x00000443 => "\xf3", + 0x00000444 => "\xf4", + 0x00000445 => "\xf5", + 0x00000446 => "\xf6", + 0x00000447 => "\xf7", + 0x00000448 => "\xf8", + 0x00000449 => "\xf9", + 0x0000044a => "\xfa", + 0x0000044b => "\xfb", + 0x0000044c => "\xfc", + 0x0000044d => "\xfd", + 0x0000044e => "\xfe", + 0x0000044f => "\xdf", + 0x00000451 => "\xde", + 0x00000452 => "\xac", + 0x00000453 => "\xaf", + 0x00000454 => "\xb9", + 0x00000455 => "\xcf", + 0x00000456 => "\xb4", + 0x00000457 => "\xbb", + 0x00000458 => "\xc0", + 0x00000459 => "\xbd", + 0x0000045a => "\xbf", + 0x0000045b => "\xcc", + 0x0000045c => "\xce", + 0x0000045e => "\xd9", + 0x0000045f => "\xdb", + 0x00000490 => "\xa2", + 0x00000491 => "\xb6", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xd7", + 0x00002020 => "\xa0", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002116 => "\xdc", + 0x00002122 => "\xaa", + 0x00002206 => "\xc6", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MACUKRAINE - Conversion routines for MACUKRAINE + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MACUKRAINE. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00000410 | CYRILLIC CAPITAL LETTER A + 81 | 00000411 | CYRILLIC CAPITAL LETTER BE + 82 | 00000412 | CYRILLIC CAPITAL LETTER VE + 83 | 00000413 | CYRILLIC CAPITAL LETTER GHE + 84 | 00000414 | CYRILLIC CAPITAL LETTER DE + 85 | 00000415 | CYRILLIC CAPITAL LETTER IE + 86 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + 87 | 00000417 | CYRILLIC CAPITAL LETTER ZE + 88 | 00000418 | CYRILLIC CAPITAL LETTER I + 89 | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + 8A | 0000041A | CYRILLIC CAPITAL LETTER KA + 8B | 0000041B | CYRILLIC CAPITAL LETTER EL + 8C | 0000041C | CYRILLIC CAPITAL LETTER EM + 8D | 0000041D | CYRILLIC CAPITAL LETTER EN + 8E | 0000041E | CYRILLIC CAPITAL LETTER O + 8F | 0000041F | CYRILLIC CAPITAL LETTER PE + 90 | 00000420 | CYRILLIC CAPITAL LETTER ER + 91 | 00000421 | CYRILLIC CAPITAL LETTER ES + 92 | 00000422 | CYRILLIC CAPITAL LETTER TE + 93 | 00000423 | CYRILLIC CAPITAL LETTER U + 94 | 00000424 | CYRILLIC CAPITAL LETTER EF + 95 | 00000425 | CYRILLIC CAPITAL LETTER HA + 96 | 00000426 | CYRILLIC CAPITAL LETTER TSE + 97 | 00000427 | CYRILLIC CAPITAL LETTER CHE + 98 | 00000428 | CYRILLIC CAPITAL LETTER SHA + 99 | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + 9A | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + 9B | 0000042B | CYRILLIC CAPITAL LETTER YERU + 9C | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + 9D | 0000042D | CYRILLIC CAPITAL LETTER E + 9E | 0000042E | CYRILLIC CAPITAL LETTER YU + 9F | 0000042F | CYRILLIC CAPITAL LETTER YA + A0 | 00002020 | DAGGER + A1 | 000000B0 | DEGREE SIGN + A2 | 00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 00000402 | CYRILLIC CAPITAL LETTER DJE + AC | 00000452 | CYRILLIC SMALL LETTER DJE + AD | 00002260 | NOT EQUAL TO + AE | 00000403 | CYRILLIC CAPITAL LETTER GJE + AF | 00000453 | CYRILLIC SMALL LETTER GJE + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + B5 | 000000B5 | MICRO SIGN + B6 | 00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN + B7 | 00000408 | CYRILLIC CAPITAL LETTER JE + B8 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + B9 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + BA | 00000407 | CYRILLIC CAPITAL LETTER YI + BB | 00000457 | CYRILLIC SMALL LETTER YI + BC | 00000409 | CYRILLIC CAPITAL LETTER LJE + BD | 00000459 | CYRILLIC SMALL LETTER LJE + BE | 0000040A | CYRILLIC CAPITAL LETTER NJE + BF | 0000045A | CYRILLIC SMALL LETTER NJE + C0 | 00000458 | CYRILLIC SMALL LETTER JE + C1 | 00000405 | CYRILLIC CAPITAL LETTER DZE + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00002206 | INCREMENT + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 0000040B | CYRILLIC CAPITAL LETTER TSHE + CC | 0000045B | CYRILLIC SMALL LETTER TSHE + CD | 0000040C | CYRILLIC CAPITAL LETTER KJE + CE | 0000045C | CYRILLIC SMALL LETTER KJE + CF | 00000455 | CYRILLIC SMALL LETTER DZE + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + D8 | 0000040E | CYRILLIC CAPITAL LETTER SHORT U + D9 | 0000045E | CYRILLIC SMALL LETTER SHORT U + DA | 0000040F | CYRILLIC CAPITAL LETTER DZHE + DB | 0000045F | CYRILLIC SMALL LETTER DZHE + DC | 00002116 | NUMERO SIGN + DD | 00000401 | CYRILLIC CAPITAL LETTER IO + DE | 00000451 | CYRILLIC SMALL LETTER IO + DF | 0000044F | CYRILLIC SMALL LETTER YA + E0 | 00000430 | CYRILLIC SMALL LETTER A + E1 | 00000431 | CYRILLIC SMALL LETTER BE + E2 | 00000432 | CYRILLIC SMALL LETTER VE + E3 | 00000433 | CYRILLIC SMALL LETTER GHE + E4 | 00000434 | CYRILLIC SMALL LETTER DE + E5 | 00000435 | CYRILLIC SMALL LETTER IE + E6 | 00000436 | CYRILLIC SMALL LETTER ZHE + E7 | 00000437 | CYRILLIC SMALL LETTER ZE + E8 | 00000438 | CYRILLIC SMALL LETTER I + E9 | 00000439 | CYRILLIC SMALL LETTER SHORT I + EA | 0000043A | CYRILLIC SMALL LETTER KA + EB | 0000043B | CYRILLIC SMALL LETTER EL + EC | 0000043C | CYRILLIC SMALL LETTER EM + ED | 0000043D | CYRILLIC SMALL LETTER EN + EE | 0000043E | CYRILLIC SMALL LETTER O + EF | 0000043F | CYRILLIC SMALL LETTER PE + F0 | 00000440 | CYRILLIC SMALL LETTER ER + F1 | 00000441 | CYRILLIC SMALL LETTER ES + F2 | 00000442 | CYRILLIC SMALL LETTER TE + F3 | 00000443 | CYRILLIC SMALL LETTER U + F4 | 00000444 | CYRILLIC SMALL LETTER EF + F5 | 00000445 | CYRILLIC SMALL LETTER HA + F6 | 00000446 | CYRILLIC SMALL LETTER TSE + F7 | 00000447 | CYRILLIC SMALL LETTER CHE + F8 | 00000448 | CYRILLIC SMALL LETTER SHA + F9 | 00000449 | CYRILLIC SMALL LETTER SHCHA + FA | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + FB | 0000044B | CYRILLIC SMALL LETTER YERU + FC | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + FD | 0000044D | CYRILLIC SMALL LETTER E + FE | 0000044E | CYRILLIC SMALL LETTER YU + FF | 000000A4 | CURRENCY SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MAC_IS.pm b/lib/Locale/RecodeData/MAC_IS.pm new file mode 100644 index 0000000..e62e46e --- /dev/null +++ b/lib/Locale/RecodeData/MAC_IS.pm @@ -0,0 +1,1134 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MAC-IS. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MAC_IS; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0x00c5, + 0x00c7, + 0x00c9, + 0x00d1, + 0x00d6, + 0x00dc, + 0x00e1, + 0x00e0, + 0x00e2, + 0x00e4, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00ed, + 0x00ec, + 0x00ee, + 0x00ef, + 0x00f1, + 0x00f3, + 0x00f2, + 0x00f4, + 0x00f6, + 0x00f5, + 0x00fa, + 0x00f9, + 0x00fb, + 0x00fc, + 0x2020, + 0x00b0, + 0x00a2, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x00df, + 0x00ae, + 0x00a9, + 0x2122, + 0x00b4, + 0x00a8, + 0x2260, + 0x00c6, + 0x00d8, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x00a5, + 0x00b5, + 0x2202, + 0x2211, + 0x220f, + 0x03c0, + 0x222b, + 0x00aa, + 0x00ba, + 0x03a9, + 0x00e6, + 0x00f8, + 0x00bf, + 0x00a1, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x0394, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x00c0, + 0x00c3, + 0x00d5, + 0x0152, + 0x0153, + 0x2014, + 0x2013, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x25c6, + 0x00ff, + 0x0178, + 0x2044, + 0x00a4, + 0x0110, + 0x0111, + 0x00de, + 0x00fe, + 0x2021, + 0x00b7, + 0x201a, + 0x201e, + 0x2030, + 0x00c2, + 0x00ca, + 0x00c1, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00d3, + 0x00d4, + 0xe01e, + 0x00d2, + 0x00da, + 0x00db, + 0x00d9, + 0x0131, + 0xfffd, + 0xfffd, + 0x00af, + 0x02d8, + 0x02d9, + 0x02da, + 0x00b8, + 0x02dd, + 0x02db, + 0x02c7, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xc3\x85", + "\xc3\x87", + "\xc3\x89", + "\xc3\x91", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xa1", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xad", + "\xc3\xac", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb1", + "\xc3\xb3", + "\xc3\xb2", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb5", + "\xc3\xba", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xe2\x80\xa0", + "\xc2\xb0", + "\xc2\xa2", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xc3\x9f", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xc2\xb4", + "\xc2\xa8", + "\xe2\x89\xa0", + "\xc3\x86", + "\xc3\x98", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xc2\xa5", + "\xc2\xb5", + "\xe2\x88\x82", + "\xe2\x88\x91", + "\xe2\x88\x8f", + "\xcf\x80", + "\xe2\x88\xab", + "\xc2\xaa", + "\xc2\xba", + "\xce\xa9", + "\xc3\xa6", + "\xc3\xb8", + "\xc2\xbf", + "\xc2\xa1", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xce\x94", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xc3\x80", + "\xc3\x83", + "\xc3\x95", + "\xc5\x92", + "\xc5\x93", + "\xe2\x80\x94", + "\xe2\x80\x93", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x97\x86", + "\xc3\xbf", + "\xc5\xb8", + "\xe2\x81\x84", + "\xc2\xa4", + "\xc4\x90", + "\xc4\x91", + "\xc3\x9e", + "\xc3\xbe", + "\xe2\x80\xa1", + "\xc2\xb7", + "\xe2\x80\x9a", + "\xe2\x80\x9e", + "\xe2\x80\xb0", + "\xc3\x82", + "\xc3\x8a", + "\xc3\x81", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\x93", + "\xc3\x94", + "\xee\x80\x9e", + "\xc3\x92", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x99", + "\xc4\xb1", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc2\xaf", + "\xcb\x98", + "\xcb\x99", + "\xcb\x9a", + "\xc2\xb8", + "\xcb\x9d", + "\xcb\x9b", + "\xcb\x87", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a1 => "\xc1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xdb", + 0x000000a5 => "\xb4", + 0x000000a7 => "\xa4", + 0x000000a8 => "\xac", + 0x000000a9 => "\xa9", + 0x000000aa => "\xbb", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000af => "\xf8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b4 => "\xab", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000b7 => "\xe1", + 0x000000b8 => "\xfc", + 0x000000ba => "\xbc", + 0x000000bb => "\xc8", + 0x000000bf => "\xc0", + 0x000000c0 => "\xcb", + 0x000000c1 => "\xe7", + 0x000000c2 => "\xe5", + 0x000000c3 => "\xcc", + 0x000000c4 => "\x80", + 0x000000c5 => "\x81", + 0x000000c6 => "\xae", + 0x000000c7 => "\x82", + 0x000000c8 => "\xe9", + 0x000000c9 => "\x83", + 0x000000ca => "\xe6", + 0x000000cb => "\xe8", + 0x000000cc => "\xed", + 0x000000cd => "\xea", + 0x000000ce => "\xeb", + 0x000000cf => "\xec", + 0x000000d1 => "\x84", + 0x000000d2 => "\xf1", + 0x000000d3 => "\xee", + 0x000000d4 => "\xef", + 0x000000d5 => "\xcd", + 0x000000d6 => "\x85", + 0x000000d8 => "\xaf", + 0x000000d9 => "\xf4", + 0x000000da => "\xf2", + 0x000000db => "\xf3", + 0x000000dc => "\x86", + 0x000000de => "\xde", + 0x000000df => "\xa7", + 0x000000e0 => "\x88", + 0x000000e1 => "\x87", + 0x000000e2 => "\x89", + 0x000000e3 => "\x8b", + 0x000000e4 => "\x8a", + 0x000000e5 => "\x8c", + 0x000000e6 => "\xbe", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ec => "\x93", + 0x000000ed => "\x92", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f1 => "\x96", + 0x000000f2 => "\x98", + 0x000000f3 => "\x97", + 0x000000f4 => "\x99", + 0x000000f5 => "\x9b", + 0x000000f6 => "\x9a", + 0x000000f7 => "\xd6", + 0x000000f8 => "\xbf", + 0x000000f9 => "\x9d", + 0x000000fa => "\x9c", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x000000fe => "\xdf", + 0x000000ff => "\xd8", + 0x00000110 => "\xdc", + 0x00000111 => "\xdd", + 0x00000131 => "\xf5", + 0x00000152 => "\xce", + 0x00000153 => "\xcf", + 0x00000178 => "\xd9", + 0x00000192 => "\xc4", + 0x000002c7 => "\xff", + 0x000002d8 => "\xf9", + 0x000002d9 => "\xfa", + 0x000002da => "\xfb", + 0x000002db => "\xfe", + 0x000002dd => "\xfd", + 0x00000394 => "\xc6", + 0x000003a9 => "\xbd", + 0x000003c0 => "\xb9", + 0x00002013 => "\xd1", + 0x00002014 => "\xd0", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201a => "\xe2", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xe3", + 0x00002020 => "\xa0", + 0x00002021 => "\xe0", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002030 => "\xe4", + 0x00002044 => "\xda", + 0x00002122 => "\xaa", + 0x00002202 => "\xb6", + 0x0000220f => "\xb8", + 0x00002211 => "\xb7", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x0000222b => "\xba", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", + 0x000025c6 => "\xd7", + 0x0000e01e => "\xf0", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MAC_IS - Conversion routines for MAC-IS + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MAC-IS. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 82 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 8C | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 93 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 97 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + 98 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 9C | 000000FA | LATIN SMALL LETTER U WITH ACUTE + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A0 | 00002020 | DAGGER + A1 | 000000B0 | DEGREE SIGN + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 000000DF | LATIN SMALL LETTER SHARP S (German) + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 000000B4 | ACUTE ACCENT + AC | 000000A8 | DIAERESIS + AD | 00002260 | NOT EQUAL TO + AE | 000000C6 | LATIN CAPITAL LETTER AE + AF | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 000000A5 | YEN SIGN + B5 | 000000B5 | MICRO SIGN + B6 | 00002202 | PARTIAL DIFFERENTIAL + B7 | 00002211 | N-ARY SUMMATION + B8 | 0000220F | N-ARY PRODUCT + B9 | 000003C0 | GREEK SMALL LETTER PI + BA | 0000222B | INTEGRAL + BB | 000000AA | FEMININE ORDINAL INDICATOR + BC | 000000BA | MASCULINE ORDINAL INDICATOR + BD | 000003A9 | GREEK CAPITAL LETTER OMEGA + BE | 000000E6 | LATIN SMALL LETTER AE + BF | 000000F8 | LATIN SMALL LETTER O WITH STROKE + C0 | 000000BF | INVERTED QUESTION MARK + C1 | 000000A1 | INVERTED EXCLAMATION MARK + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00000394 | GREEK CAPITAL LETTER DELTA + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + CC | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + CD | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + CE | 00000152 | LATIN CAPITAL LIGATURE OE + CF | 00000153 | LATIN SMALL LIGATURE OE + D0 | 00002014 | EM DASH + D1 | 00002013 | EN DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 000025C6 | BLACK DIAMOND + D8 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + D9 | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + DA | 00002044 | FRACTION SLASH + DB | 000000A4 | CURRENCY SIGN + DC | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + DD | 00000111 | LATIN SMALL LETTER D WITH STROKE + DE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + DF | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + E0 | 00002021 | DOUBLE DAGGER + E1 | 000000B7 | MIDDLE DOT + E2 | 0000201A | SINGLE LOW-9 QUOTATION MARK + E3 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + E4 | 00002030 | PER MILLE SIGN + E5 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + E6 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + E7 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + E8 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + E9 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + EA | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + EB | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + EC | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + ED | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + F0 | 0000E01E | APPLE LOGO (Macintosh_F0) + F1 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + F2 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + F3 | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + F4 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + F5 | 00000131 | LATIN SMALL LETTER DOTLESS I + F8 | 000000AF | MACRON + F9 | 000002D8 | BREVE + FA | 000002D9 | DOT ABOVE (Mandarin Chinese light tone) + FB | 000002DA | RING ABOVE + FC | 000000B8 | CEDILLA + FD | 000002DD | DOUBLE ACUTE ACCENT + FE | 000002DB | OGONEK + FF | 000002C7 | CARON (Mandarin Chinese third tone) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MAC_SAMI.pm b/lib/Locale/RecodeData/MAC_SAMI.pm new file mode 100644 index 0000000..8b341e7 --- /dev/null +++ b/lib/Locale/RecodeData/MAC_SAMI.pm @@ -0,0 +1,1141 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MAC-SAMI. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MAC_SAMI; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00c4, + 0x00c5, + 0x00c7, + 0x00c9, + 0x00d1, + 0x00d6, + 0x00dc, + 0x00e1, + 0x00e0, + 0x00e2, + 0x00e4, + 0x00e3, + 0x00e5, + 0x00e7, + 0x00e9, + 0x00e8, + 0x00ea, + 0x00eb, + 0x00ed, + 0x00ec, + 0x00ee, + 0x00ef, + 0x00f1, + 0x00f3, + 0x00f2, + 0x00f4, + 0x00f6, + 0x00f5, + 0x00fa, + 0x00f9, + 0x00fb, + 0x00fc, + 0x00dd, + 0x00b0, + 0x010c, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x00df, + 0x00ae, + 0x00a9, + 0x2122, + 0x00b4, + 0x00a8, + 0x2260, + 0x00c6, + 0x00d8, + 0x0110, + 0x014a, + 0x821e, + 0x821f, + 0x0160, + 0x0166, + 0x2202, + 0x017d, + 0x010d, + 0x0111, + 0x014b, + 0x0161, + 0x0167, + 0x017e, + 0x00e6, + 0x00f8, + 0x00bf, + 0x00a1, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x2206, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x00c0, + 0x00c3, + 0x00d5, + 0x0152, + 0x0153, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x25ca, + 0x00ff, + 0x0178, + 0x2044, + 0x00a4, + 0x00d0, + 0x00f0, + 0x00de, + 0x00fe, + 0x00fd, + 0x00b7, + 0x201a, + 0x201e, + 0x2030, + 0x00c2, + 0x00ca, + 0x00c1, + 0x00cb, + 0x00c8, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00cc, + 0x00d3, + 0x00d4, + 0xf8ff, + 0x00d2, + 0x00da, + 0x00db, + 0x00d9, + 0x0131, + 0x01b7, + 0x0292, + 0x01ee, + 0x01ef, + 0x01e4, + 0x01e5, + 0x01e6, + 0x01e7, + 0x01e8, + 0x01e9, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc3\x84", + "\xc3\x85", + "\xc3\x87", + "\xc3\x89", + "\xc3\x91", + "\xc3\x96", + "\xc3\x9c", + "\xc3\xa1", + "\xc3\xa0", + "\xc3\xa2", + "\xc3\xa4", + "\xc3\xa3", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xa9", + "\xc3\xa8", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xad", + "\xc3\xac", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb1", + "\xc3\xb3", + "\xc3\xb2", + "\xc3\xb4", + "\xc3\xb6", + "\xc3\xb5", + "\xc3\xba", + "\xc3\xb9", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\x9d", + "\xc2\xb0", + "\xc4\x8c", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xc3\x9f", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xc2\xb4", + "\xc2\xa8", + "\xe2\x89\xa0", + "\xc3\x86", + "\xc3\x98", + "\xc4\x90", + "\xc5\x8a", + "\xe8\x88\x9e", + "\xe8\x88\x9f", + "\xc5\xa0", + "\xc5\xa6", + "\xe2\x88\x82", + "\xc5\xbd", + "\xc4\x8d", + "\xc4\x91", + "\xc5\x8b", + "\xc5\xa1", + "\xc5\xa7", + "\xc5\xbe", + "\xc3\xa6", + "\xc3\xb8", + "\xc2\xbf", + "\xc2\xa1", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xe2\x88\x86", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xc3\x80", + "\xc3\x83", + "\xc3\x95", + "\xc5\x92", + "\xc5\x93", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x97\x8a", + "\xc3\xbf", + "\xc5\xb8", + "\xe2\x81\x84", + "\xc2\xa4", + "\xc3\x90", + "\xc3\xb0", + "\xc3\x9e", + "\xc3\xbe", + "\xc3\xbd", + "\xc2\xb7", + "\xe2\x80\x9a", + "\xe2\x80\x9e", + "\xe2\x80\xb0", + "\xc3\x82", + "\xc3\x8a", + "\xc3\x81", + "\xc3\x8b", + "\xc3\x88", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x8c", + "\xc3\x93", + "\xc3\x94", + "\xef\xa3\xbf", + "\xc3\x92", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x99", + "\xc4\xb1", + "\xc6\xb7", + "\xca\x92", + "\xc7\xae", + "\xc7\xaf", + "\xc7\xa4", + "\xc7\xa5", + "\xc7\xa6", + "\xc7\xa7", + "\xc7\xa8", + "\xc7\xa9", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a1 => "\xc1", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xdb", + 0x000000a7 => "\xa4", + 0x000000a8 => "\xac", + 0x000000a9 => "\xa9", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000b0 => "\xa1", + 0x000000b4 => "\xab", + 0x000000b6 => "\xa6", + 0x000000b7 => "\xe1", + 0x000000bb => "\xc8", + 0x000000bf => "\xc0", + 0x000000c0 => "\xcb", + 0x000000c1 => "\xe7", + 0x000000c2 => "\xe5", + 0x000000c3 => "\xcc", + 0x000000c4 => "\x80", + 0x000000c5 => "\x81", + 0x000000c6 => "\xae", + 0x000000c7 => "\x82", + 0x000000c8 => "\xe9", + 0x000000c9 => "\x83", + 0x000000ca => "\xe6", + 0x000000cb => "\xe8", + 0x000000cc => "\xed", + 0x000000cd => "\xea", + 0x000000ce => "\xeb", + 0x000000cf => "\xec", + 0x000000d0 => "\xdc", + 0x000000d1 => "\x84", + 0x000000d2 => "\xf1", + 0x000000d3 => "\xee", + 0x000000d4 => "\xef", + 0x000000d5 => "\xcd", + 0x000000d6 => "\x85", + 0x000000d8 => "\xaf", + 0x000000d9 => "\xf4", + 0x000000da => "\xf2", + 0x000000db => "\xf3", + 0x000000dc => "\x86", + 0x000000dd => "\xa0", + 0x000000de => "\xde", + 0x000000df => "\xa7", + 0x000000e0 => "\x88", + 0x000000e1 => "\x87", + 0x000000e2 => "\x89", + 0x000000e3 => "\x8b", + 0x000000e4 => "\x8a", + 0x000000e5 => "\x8c", + 0x000000e6 => "\xbe", + 0x000000e7 => "\x8d", + 0x000000e8 => "\x8f", + 0x000000e9 => "\x8e", + 0x000000ea => "\x90", + 0x000000eb => "\x91", + 0x000000ec => "\x93", + 0x000000ed => "\x92", + 0x000000ee => "\x94", + 0x000000ef => "\x95", + 0x000000f0 => "\xdd", + 0x000000f1 => "\x96", + 0x000000f2 => "\x98", + 0x000000f3 => "\x97", + 0x000000f4 => "\x99", + 0x000000f5 => "\x9b", + 0x000000f6 => "\x9a", + 0x000000f7 => "\xd6", + 0x000000f8 => "\xbf", + 0x000000f9 => "\x9d", + 0x000000fa => "\x9c", + 0x000000fb => "\x9e", + 0x000000fc => "\x9f", + 0x000000fd => "\xe0", + 0x000000fe => "\xdf", + 0x000000ff => "\xd8", + 0x0000010c => "\xa2", + 0x0000010d => "\xb8", + 0x00000110 => "\xb0", + 0x00000111 => "\xb9", + 0x00000131 => "\xf5", + 0x0000014a => "\xb1", + 0x0000014b => "\xba", + 0x00000152 => "\xce", + 0x00000153 => "\xcf", + 0x00000160 => "\xb4", + 0x00000161 => "\xbb", + 0x00000166 => "\xb5", + 0x00000167 => "\xbc", + 0x00000178 => "\xd9", + 0x0000017d => "\xb7", + 0x0000017e => "\xbd", + 0x00000192 => "\xc4", + 0x000001b7 => "\xf6", + 0x000001e4 => "\xfa", + 0x000001e5 => "\xfb", + 0x000001e6 => "\xfc", + 0x000001e7 => "\xfd", + 0x000001e8 => "\xfe", + 0x000001e9 => "\xff", + 0x000001ee => "\xf8", + 0x000001ef => "\xf9", + 0x00000292 => "\xf7", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201a => "\xe2", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xe3", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002030 => "\xe4", + 0x00002044 => "\xda", + 0x00002122 => "\xaa", + 0x00002202 => "\xb6", + 0x00002206 => "\xc6", + 0x0000221a => "\xc3", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x000025ca => "\xd7", + 0x0000821e => "\xb2", + 0x0000821f => "\xb3", + 0x0000f8ff => "\xf0", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MAC_SAMI - Conversion routines for MAC-SAMI + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MAC-SAMI. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + source: http://www.indigo.ie/egt/standards/se/mac-sami.html + author: Regnor Jernsletten ERegnor.Jernsletten@sami.uit.noE + date: 2001-07-31 + comment: Macintosh sami standard. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 81 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 82 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 83 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 84 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 85 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 86 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 87 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + 88 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + 89 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + 8A | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 8B | 000000E3 | LATIN SMALL LETTER A WITH TILDE + 8C | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 8D | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + 8E | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + 8F | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + 90 | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + 91 | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + 92 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + 93 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + 94 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + 95 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + 96 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + 97 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + 98 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + 99 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + 9A | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 9B | 000000F5 | LATIN SMALL LETTER O WITH TILDE + 9C | 000000FA | LATIN SMALL LETTER U WITH ACUTE + 9D | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + 9E | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + 9F | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + A0 | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + A1 | 000000B0 | DEGREE SIGN + A2 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 000000DF | LATIN SMALL LETTER SHARP S (German) + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 000000B4 | ACUTE ACCENT + AC | 000000A8 | DIAERESIS + AD | 00002260 | NOT EQUAL TO + AE | 000000C6 | LATIN CAPITAL LETTER AE + AF | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + B0 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + B1 | 0000014A | LATIN CAPITAL LETTER ENG + B2 | 0000821E | LATIN CAPITAL LETTER H WITH CARON + B3 | 0000821F | LATIN SMALL LETTER H WITH CARON + B4 | 00000160 | LATIN CAPITAL LETTER S WITH CARON + B5 | 00000166 | LATIN CAPITAL LETTER T WITH STROKE + B6 | 00002202 | PARTIAL DIFFERENTIAL + B7 | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + B8 | 0000010D | LATIN SMALL LETTER C WITH CARON + B9 | 00000111 | LATIN SMALL LETTER D WITH STROKE + BA | 0000014B | LATIN SMALL LETTER ENG + BB | 00000161 | LATIN SMALL LETTER S WITH CARON + BC | 00000167 | LATIN SMALL LETTER T WITH STROKE + BD | 0000017E | LATIN SMALL LETTER Z WITH CARON + BE | 000000E6 | LATIN SMALL LETTER AE + BF | 000000F8 | LATIN SMALL LETTER O WITH STROKE + C0 | 000000BF | INVERTED QUESTION MARK + C1 | 000000A1 | INVERTED EXCLAMATION MARK + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00002206 | INCREMENT + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + CC | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + CD | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + CE | 00000152 | LATIN CAPITAL LETTER LIGATURE OE + CF | 00000153 | LATIN SMALL LETTER LIGATURE OE + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 000025CA | LOZENGE + D8 | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + D9 | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + DA | 00002044 | FRACTION SLASH + DB | 000000A4 | CURRENCY SIGN + DC | 000000D0 | LATIN CAPITAL LETTER ETH + DD | 000000F0 | LATIN SMALL LETTER ETH + DE | 000000DE | LATIN CAPITAL LETTER THORN + DF | 000000FE | LATIN SMALL LETTER THORN + E0 | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + E1 | 000000B7 | MIDDLE DOT + E2 | 0000201A | SINGLE LOW-9 QUOTATION MARK + E3 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + E4 | 00002030 | PER MILLE SIGN + E5 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + E6 | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + E7 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + E8 | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + E9 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + EA | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + EB | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + EC | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + ED | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + EE | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + EF | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + F0 | 0000F8FF | APPLE SIGN + F1 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + F2 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + F3 | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + F4 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + F5 | 00000131 | LATIN SMALL LETTER DOTLESS I + F6 | 000001B7 | LATIN CAPITAL LETTER EZH + F7 | 00000292 | LATIN SMALL LETTER EZH + F8 | 000001EE | LATIN CAPITAL LETTER EZH WITH CARON + F9 | 000001EF | LATIN SMALL LETTER EZH WITH CARON + FA | 000001E4 | LATIN CAPITAL LETTER G WITH STROKE + FB | 000001E5 | LATIN SMALLL LETTER G WITH STROKE + FC | 000001E6 | LATIN CAPITAL LETTER G WITH CARON + FD | 000001E7 | LATIN SMALL LETTER G WITH CARON + FE | 000001E8 | LATIN CAPITAL LETTER K WITH CARON + FF | 000001E9 | LATIN SMALL LETTER K WITH CARON + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/MAC_UK.pm b/lib/Locale/RecodeData/MAC_UK.pm new file mode 100644 index 0000000..e5ccbdd --- /dev/null +++ b/lib/Locale/RecodeData/MAC_UK.pm @@ -0,0 +1,1138 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for MAC-UK. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::MAC_UK; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x2020, + 0x00b0, + 0x0490, + 0x00a3, + 0x00a7, + 0x2022, + 0x00b6, + 0x0406, + 0x00ae, + 0x00a9, + 0x2122, + 0x0402, + 0x0452, + 0x2260, + 0x0403, + 0x0453, + 0x221e, + 0x00b1, + 0x2264, + 0x2265, + 0x0456, + 0x00b5, + 0x0491, + 0x0408, + 0x0404, + 0x0454, + 0x0407, + 0x0457, + 0x0409, + 0x0459, + 0x040a, + 0x045a, + 0x0458, + 0x0405, + 0x00ac, + 0x221a, + 0x0192, + 0x2248, + 0x2206, + 0x00ab, + 0x00bb, + 0x2026, + 0x00a0, + 0x040b, + 0x045b, + 0x040c, + 0x045c, + 0x0455, + 0x2013, + 0x2014, + 0x201c, + 0x201d, + 0x2018, + 0x2019, + 0x00f7, + 0x201e, + 0x040e, + 0x045e, + 0x040f, + 0x045f, + 0x2116, + 0x0401, + 0x0451, + 0x044f, + 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, + 0x00a4, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xd0\x90", + "\xd0\x91", + "\xd0\x92", + "\xd0\x93", + "\xd0\x94", + "\xd0\x95", + "\xd0\x96", + "\xd0\x97", + "\xd0\x98", + "\xd0\x99", + "\xd0\x9a", + "\xd0\x9b", + "\xd0\x9c", + "\xd0\x9d", + "\xd0\x9e", + "\xd0\x9f", + "\xd0\xa0", + "\xd0\xa1", + "\xd0\xa2", + "\xd0\xa3", + "\xd0\xa4", + "\xd0\xa5", + "\xd0\xa6", + "\xd0\xa7", + "\xd0\xa8", + "\xd0\xa9", + "\xd0\xaa", + "\xd0\xab", + "\xd0\xac", + "\xd0\xad", + "\xd0\xae", + "\xd0\xaf", + "\xe2\x80\xa0", + "\xc2\xb0", + "\xd2\x90", + "\xc2\xa3", + "\xc2\xa7", + "\xe2\x80\xa2", + "\xc2\xb6", + "\xd0\x86", + "\xc2\xae", + "\xc2\xa9", + "\xe2\x84\xa2", + "\xd0\x82", + "\xd1\x92", + "\xe2\x89\xa0", + "\xd0\x83", + "\xd1\x93", + "\xe2\x88\x9e", + "\xc2\xb1", + "\xe2\x89\xa4", + "\xe2\x89\xa5", + "\xd1\x96", + "\xc2\xb5", + "\xd2\x91", + "\xd0\x88", + "\xd0\x84", + "\xd1\x94", + "\xd0\x87", + "\xd1\x97", + "\xd0\x89", + "\xd1\x99", + "\xd0\x8a", + "\xd1\x9a", + "\xd1\x98", + "\xd0\x85", + "\xc2\xac", + "\xe2\x88\x9a", + "\xc6\x92", + "\xe2\x89\x88", + "\xe2\x88\x86", + "\xc2\xab", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xc2\xa0", + "\xd0\x8b", + "\xd1\x9b", + "\xd0\x8c", + "\xd1\x9c", + "\xd1\x95", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xc3\xb7", + "\xe2\x80\x9e", + "\xd0\x8e", + "\xd1\x9e", + "\xd0\x8f", + "\xd1\x9f", + "\xe2\x84\x96", + "\xd0\x81", + "\xd1\x91", + "\xd1\x8f", + "\xd0\xb0", + "\xd0\xb1", + "\xd0\xb2", + "\xd0\xb3", + "\xd0\xb4", + "\xd0\xb5", + "\xd0\xb6", + "\xd0\xb7", + "\xd0\xb8", + "\xd0\xb9", + "\xd0\xba", + "\xd0\xbb", + "\xd0\xbc", + "\xd0\xbd", + "\xd0\xbe", + "\xd0\xbf", + "\xd1\x80", + "\xd1\x81", + "\xd1\x82", + "\xd1\x83", + "\xd1\x84", + "\xd1\x85", + "\xd1\x86", + "\xd1\x87", + "\xd1\x88", + "\xd1\x89", + "\xd1\x8a", + "\xd1\x8b", + "\xd1\x8c", + "\xd1\x8d", + "\xd1\x8e", + "\xc2\xa4", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xca", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xff", + 0x000000a7 => "\xa4", + 0x000000a9 => "\xa9", + 0x000000ab => "\xc7", + 0x000000ac => "\xc2", + 0x000000ae => "\xa8", + 0x000000b0 => "\xa1", + 0x000000b1 => "\xb1", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xa6", + 0x000000bb => "\xc8", + 0x000000f7 => "\xd6", + 0x00000192 => "\xc4", + 0x00000401 => "\xdd", + 0x00000402 => "\xab", + 0x00000403 => "\xae", + 0x00000404 => "\xb8", + 0x00000405 => "\xc1", + 0x00000406 => "\xa7", + 0x00000407 => "\xba", + 0x00000408 => "\xb7", + 0x00000409 => "\xbc", + 0x0000040a => "\xbe", + 0x0000040b => "\xcb", + 0x0000040c => "\xcd", + 0x0000040e => "\xd8", + 0x0000040f => "\xda", + 0x00000410 => "\x80", + 0x00000411 => "\x81", + 0x00000412 => "\x82", + 0x00000413 => "\x83", + 0x00000414 => "\x84", + 0x00000415 => "\x85", + 0x00000416 => "\x86", + 0x00000417 => "\x87", + 0x00000418 => "\x88", + 0x00000419 => "\x89", + 0x0000041a => "\x8a", + 0x0000041b => "\x8b", + 0x0000041c => "\x8c", + 0x0000041d => "\x8d", + 0x0000041e => "\x8e", + 0x0000041f => "\x8f", + 0x00000420 => "\x90", + 0x00000421 => "\x91", + 0x00000422 => "\x92", + 0x00000423 => "\x93", + 0x00000424 => "\x94", + 0x00000425 => "\x95", + 0x00000426 => "\x96", + 0x00000427 => "\x97", + 0x00000428 => "\x98", + 0x00000429 => "\x99", + 0x0000042a => "\x9a", + 0x0000042b => "\x9b", + 0x0000042c => "\x9c", + 0x0000042d => "\x9d", + 0x0000042e => "\x9e", + 0x0000042f => "\x9f", + 0x00000430 => "\xe0", + 0x00000431 => "\xe1", + 0x00000432 => "\xe2", + 0x00000433 => "\xe3", + 0x00000434 => "\xe4", + 0x00000435 => "\xe5", + 0x00000436 => "\xe6", + 0x00000437 => "\xe7", + 0x00000438 => "\xe8", + 0x00000439 => "\xe9", + 0x0000043a => "\xea", + 0x0000043b => "\xeb", + 0x0000043c => "\xec", + 0x0000043d => "\xed", + 0x0000043e => "\xee", + 0x0000043f => "\xef", + 0x00000440 => "\xf0", + 0x00000441 => "\xf1", + 0x00000442 => "\xf2", + 0x00000443 => "\xf3", + 0x00000444 => "\xf4", + 0x00000445 => "\xf5", + 0x00000446 => "\xf6", + 0x00000447 => "\xf7", + 0x00000448 => "\xf8", + 0x00000449 => "\xf9", + 0x0000044a => "\xfa", + 0x0000044b => "\xfb", + 0x0000044c => "\xfc", + 0x0000044d => "\xfd", + 0x0000044e => "\xfe", + 0x0000044f => "\xdf", + 0x00000451 => "\xde", + 0x00000452 => "\xac", + 0x00000453 => "\xaf", + 0x00000454 => "\xb9", + 0x00000455 => "\xcf", + 0x00000456 => "\xb4", + 0x00000457 => "\xbb", + 0x00000458 => "\xc0", + 0x00000459 => "\xbd", + 0x0000045a => "\xbf", + 0x0000045b => "\xcc", + 0x0000045c => "\xce", + 0x0000045e => "\xd9", + 0x0000045f => "\xdb", + 0x00000490 => "\xa2", + 0x00000491 => "\xb6", + 0x00002013 => "\xd0", + 0x00002014 => "\xd1", + 0x00002018 => "\xd4", + 0x00002019 => "\xd5", + 0x0000201c => "\xd2", + 0x0000201d => "\xd3", + 0x0000201e => "\xd7", + 0x00002020 => "\xa0", + 0x00002022 => "\xa5", + 0x00002026 => "\xc9", + 0x00002116 => "\xdc", + 0x00002122 => "\xaa", + 0x00002206 => "\xc6", + 0x0000221a => "\xc3", + 0x0000221e => "\xb0", + 0x00002248 => "\xc5", + 0x00002260 => "\xad", + 0x00002264 => "\xb2", + 0x00002265 => "\xb3", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::MAC_UK - Conversion routines for MAC-UK + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for MAC-UK. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + automatically generated from the charDB + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL + 01 | 00000001 | START OF HEADING + 02 | 00000002 | START OF TEXT + 03 | 00000003 | END OF TEXT + 04 | 00000004 | END OF TRANSMISSION + 05 | 00000005 | ENQUIRY + 06 | 00000006 | ACKNOWLEDGE + 07 | 00000007 | BELL + 08 | 00000008 | BACKSPACE + 09 | 00000009 | HORIZONTAL TABULATION + 0A | 0000000A | LINE FEED + 0B | 0000000B | VERTICAL TABULATION + 0C | 0000000C | FORM FEED + 0D | 0000000D | CARRIAGE RETURN + 0E | 0000000E | SHIFT OUT + 0F | 0000000F | SHIFT IN + 10 | 00000010 | DATA LINK ESCAPE + 11 | 00000011 | DEVICE CONTROL ONE + 12 | 00000012 | DEVICE CONTROL TWO + 13 | 00000013 | DEVICE CONTROL THREE + 14 | 00000014 | DEVICE CONTROL FOUR + 15 | 00000015 | NEGATIVE ACKNOWLEDGE + 16 | 00000016 | SYNCHRONOUS IDLE + 17 | 00000017 | END OF TRANSMISSION BLOCK + 18 | 00000018 | CANCEL + 19 | 00000019 | END OF MEDIUM + 1A | 0000001A | SUBSTITUTE + 1B | 0000001B | ESCAPE + 1C | 0000001C | FILE SEPARATOR + 1D | 0000001D | GROUP SEPARATOR + 1E | 0000001E | RECORD SEPARATOR + 1F | 0000001F | UNIT SEPARATOR + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE + 80 | 00000410 | CYRILLIC CAPITAL LETTER A + 81 | 00000411 | CYRILLIC CAPITAL LETTER BE + 82 | 00000412 | CYRILLIC CAPITAL LETTER VE + 83 | 00000413 | CYRILLIC CAPITAL LETTER GHE + 84 | 00000414 | CYRILLIC CAPITAL LETTER DE + 85 | 00000415 | CYRILLIC CAPITAL LETTER IE + 86 | 00000416 | CYRILLIC CAPITAL LETTER ZHE + 87 | 00000417 | CYRILLIC CAPITAL LETTER ZE + 88 | 00000418 | CYRILLIC CAPITAL LETTER I + 89 | 00000419 | CYRILLIC CAPITAL LETTER SHORT I + 8A | 0000041A | CYRILLIC CAPITAL LETTER KA + 8B | 0000041B | CYRILLIC CAPITAL LETTER EL + 8C | 0000041C | CYRILLIC CAPITAL LETTER EM + 8D | 0000041D | CYRILLIC CAPITAL LETTER EN + 8E | 0000041E | CYRILLIC CAPITAL LETTER O + 8F | 0000041F | CYRILLIC CAPITAL LETTER PE + 90 | 00000420 | CYRILLIC CAPITAL LETTER ER + 91 | 00000421 | CYRILLIC CAPITAL LETTER ES + 92 | 00000422 | CYRILLIC CAPITAL LETTER TE + 93 | 00000423 | CYRILLIC CAPITAL LETTER U + 94 | 00000424 | CYRILLIC CAPITAL LETTER EF + 95 | 00000425 | CYRILLIC CAPITAL LETTER HA + 96 | 00000426 | CYRILLIC CAPITAL LETTER TSE + 97 | 00000427 | CYRILLIC CAPITAL LETTER CHE + 98 | 00000428 | CYRILLIC CAPITAL LETTER SHA + 99 | 00000429 | CYRILLIC CAPITAL LETTER SHCHA + 9A | 0000042A | CYRILLIC CAPITAL LETTER HARD SIGN + 9B | 0000042B | CYRILLIC CAPITAL LETTER YERU + 9C | 0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN + 9D | 0000042D | CYRILLIC CAPITAL LETTER E + 9E | 0000042E | CYRILLIC CAPITAL LETTER YU + 9F | 0000042F | CYRILLIC CAPITAL LETTER YA + A0 | 00002020 | DAGGER + A1 | 000000B0 | DEGREE SIGN + A2 | 00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN + A3 | 000000A3 | POUND SIGN + A4 | 000000A7 | SECTION SIGN + A5 | 00002022 | BULLET + A6 | 000000B6 | PILCROW SIGN + A7 | 00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + A8 | 000000AE | REGISTERED SIGN + A9 | 000000A9 | COPYRIGHT SIGN + AA | 00002122 | TRADE MARK SIGN + AB | 00000402 | CYRILLIC CAPITAL LETTER DJE + AC | 00000452 | CYRILLIC SMALL LETTER DJE + AD | 00002260 | NOT EQUAL TO + AE | 00000403 | CYRILLIC CAPITAL LETTER GJE + AF | 00000453 | CYRILLIC SMALL LETTER GJE + B0 | 0000221E | INFINITY + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 00002264 | LESS-THAN OR EQUAL TO + B3 | 00002265 | GREATER-THAN OR EQUAL TO + B4 | 00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + B5 | 000000B5 | MICRO SIGN + B6 | 00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN + B7 | 00000408 | CYRILLIC CAPITAL LETTER JE + B8 | 00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE + B9 | 00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE + BA | 00000407 | CYRILLIC CAPITAL LETTER YI + BB | 00000457 | CYRILLIC SMALL LETTER YI + BC | 00000409 | CYRILLIC CAPITAL LETTER LJE + BD | 00000459 | CYRILLIC SMALL LETTER LJE + BE | 0000040A | CYRILLIC CAPITAL LETTER NJE + BF | 0000045A | CYRILLIC SMALL LETTER NJE + C0 | 00000458 | CYRILLIC SMALL LETTER JE + C1 | 00000405 | CYRILLIC CAPITAL LETTER DZE + C2 | 000000AC | NOT SIGN + C3 | 0000221A | SQUARE ROOT + C4 | 00000192 | LATIN SMALL LETTER F WITH HOOK + C5 | 00002248 | ALMOST EQUAL TO + C6 | 00002206 | INCREMENT + C7 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + C8 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + C9 | 00002026 | HORIZONTAL ELLIPSIS + CA | 000000A0 | NO-BREAK SPACE + CB | 0000040B | CYRILLIC CAPITAL LETTER TSHE + CC | 0000045B | CYRILLIC SMALL LETTER TSHE + CD | 0000040C | CYRILLIC CAPITAL LETTER KJE + CE | 0000045C | CYRILLIC SMALL LETTER KJE + CF | 00000455 | CYRILLIC SMALL LETTER DZE + D0 | 00002013 | EN DASH + D1 | 00002014 | EM DASH + D2 | 0000201C | LEFT DOUBLE QUOTATION MARK + D3 | 0000201D | RIGHT DOUBLE QUOTATION MARK + D4 | 00002018 | LEFT SINGLE QUOTATION MARK + D5 | 00002019 | RIGHT SINGLE QUOTATION MARK + D6 | 000000F7 | DIVISION SIGN + D7 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + D8 | 0000040E | CYRILLIC CAPITAL LETTER SHORT U + D9 | 0000045E | CYRILLIC SMALL LETTER SHORT U + DA | 0000040F | CYRILLIC CAPITAL LETTER DZHE + DB | 0000045F | CYRILLIC SMALL LETTER DZHE + DC | 00002116 | NUMERO SIGN + DD | 00000401 | CYRILLIC CAPITAL LETTER IO + DE | 00000451 | CYRILLIC SMALL LETTER IO + DF | 0000044F | CYRILLIC SMALL LETTER YA + E0 | 00000430 | CYRILLIC SMALL LETTER A + E1 | 00000431 | CYRILLIC SMALL LETTER BE + E2 | 00000432 | CYRILLIC SMALL LETTER VE + E3 | 00000433 | CYRILLIC SMALL LETTER GHE + E4 | 00000434 | CYRILLIC SMALL LETTER DE + E5 | 00000435 | CYRILLIC SMALL LETTER IE + E6 | 00000436 | CYRILLIC SMALL LETTER ZHE + E7 | 00000437 | CYRILLIC SMALL LETTER ZE + E8 | 00000438 | CYRILLIC SMALL LETTER I + E9 | 00000439 | CYRILLIC SMALL LETTER SHORT I + EA | 0000043A | CYRILLIC SMALL LETTER KA + EB | 0000043B | CYRILLIC SMALL LETTER EL + EC | 0000043C | CYRILLIC SMALL LETTER EM + ED | 0000043D | CYRILLIC SMALL LETTER EN + EE | 0000043E | CYRILLIC SMALL LETTER O + EF | 0000043F | CYRILLIC SMALL LETTER PE + F0 | 00000440 | CYRILLIC SMALL LETTER ER + F1 | 00000441 | CYRILLIC SMALL LETTER ES + F2 | 00000442 | CYRILLIC SMALL LETTER TE + F3 | 00000443 | CYRILLIC SMALL LETTER U + F4 | 00000444 | CYRILLIC SMALL LETTER EF + F5 | 00000445 | CYRILLIC SMALL LETTER HA + F6 | 00000446 | CYRILLIC SMALL LETTER TSE + F7 | 00000447 | CYRILLIC SMALL LETTER CHE + F8 | 00000448 | CYRILLIC SMALL LETTER SHA + F9 | 00000449 | CYRILLIC SMALL LETTER SHCHA + FA | 0000044A | CYRILLIC SMALL LETTER HARD SIGN + FB | 0000044B | CYRILLIC SMALL LETTER YERU + FC | 0000044C | CYRILLIC SMALL LETTER SOFT SIGN + FD | 0000044D | CYRILLIC SMALL LETTER E + FE | 0000044E | CYRILLIC SMALL LETTER YU + FF | 000000A4 | CURRENCY SIGN + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/NATS_DANO.pm b/lib/Locale/RecodeData/NATS_DANO.pm new file mode 100644 index 0000000..f60a039 --- /dev/null +++ b/lib/Locale/RecodeData/NATS_DANO.pm @@ -0,0 +1,884 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for NATS-DANO. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::NATS_DANO; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00ab, + 0x00bb, + 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, + 0xe018, + 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, + 0x00c6, + 0x00d8, + 0x00c5, + 0x25a0, + 0x005f, + 0xe019, + 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, + 0x00e6, + 0x00f8, + 0x00e5, + 0x2013, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\xc2\xab", + "\xc2\xbb", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\xee\x80\x98", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc3\x86", + "\xc3\x98", + "\xc3\x85", + "\xe2\x96\xa0", + "\x5f", + "\xee\x80\x99", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc3\xa6", + "\xc3\xb8", + "\xc3\xa5", + "\xe2\x80\x93", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005f => "\x5f", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007f => "\x7f", + 0x000000ab => "\x22", + 0x000000bb => "\x23", + 0x000000c5 => "\x5d", + 0x000000c6 => "\x5b", + 0x000000d8 => "\x5c", + 0x000000e5 => "\x7d", + 0x000000e6 => "\x7b", + 0x000000f8 => "\x7c", + 0x00002013 => "\x7e", + 0x000025a0 => "\x5e", + 0x0000e018 => "\x40", + 0x0000e019 => "\x60", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::NATS_DANO - Conversion routines for NATS_DANO + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for NATS-DANO. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-9-1 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 23 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 0000E018 | Unit space A EISO-IR-8-1_40E + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 000000C6 | LATIN CAPITAL LETTER AE + 5C | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + 5D | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 5E | 000025A0 | BLACK SQUARE + 5F | 0000005F | LOW LINE + 60 | 0000E019 | Unit space B EISO-IR-8-1_60E + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 000000E6 | LATIN SMALL LETTER AE + 7C | 000000F8 | LATIN SMALL LETTER O WITH STROKE + 7D | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 7E | 00002013 | EN DASH + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/NATS_SEFI.pm b/lib/Locale/RecodeData/NATS_SEFI.pm new file mode 100644 index 0000000..ecfc515 --- /dev/null +++ b/lib/Locale/RecodeData/NATS_SEFI.pm @@ -0,0 +1,884 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for NATS-SEFI. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::NATS_SEFI; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xe018, + 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, + 0x00c5, + 0x25a0, + 0x005f, + 0xe019, + 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, + 0x00e5, + 0x2013, + 0x007f, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\xee\x80\x98", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\xc3\x84", + "\xc3\x96", + "\xc3\x85", + "\xe2\x96\xa0", + "\x5f", + "\xee\x80\x99", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\xc3\xa4", + "\xc3\xb6", + "\xc3\xa5", + "\xe2\x80\x93", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005f => "\x5f", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007f => "\x7f", + 0x000000c4 => "\x5b", + 0x000000c5 => "\x5d", + 0x000000d6 => "\x5c", + 0x000000e4 => "\x7b", + 0x000000e5 => "\x7d", + 0x000000f6 => "\x7c", + 0x00002013 => "\x7e", + 0x000025a0 => "\x5e", + 0x0000e018 => "\x40", + 0x0000e019 => "\x60", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::NATS_SEFI - Conversion routines for NATS_SEFI + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for NATS-SEFI. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + source: ECMA registry + alias ISO-IR-8-1 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 0000E018 | Unit space A EISO-IR-8-1_40E + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 5C | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 5D | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 5E | 000025A0 | BLACK SQUARE + 5F | 0000005F | LOW LINE + 60 | 0000E019 | Unit space B EISO-IR-8-1_60E + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + 7C | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + 7D | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + 7E | 00002013 | EN DASH + 7F | 0000007F | DELETE (DEL) + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/NEXTSTEP.pm b/lib/Locale/RecodeData/NEXTSTEP.pm new file mode 100644 index 0000000..32a2130 --- /dev/null +++ b/lib/Locale/RecodeData/NEXTSTEP.pm @@ -0,0 +1,1136 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for NEXTSTEP. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::NEXTSTEP; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x00a0, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00d0, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x00dd, + 0x00de, + 0x00b5, + 0x00d7, + 0x00f7, + 0x00a9, + 0x00a1, + 0x00a2, + 0x00a3, + 0x2044, + 0x00a5, + 0x0192, + 0x00a7, + 0x00a4, + 0x2019, + 0x201c, + 0x00ab, + 0x2039, + 0x203a, + 0xfb01, + 0xfb02, + 0x00ae, + 0x2013, + 0x2020, + 0x2021, + 0x00b7, + 0x00a6, + 0x00b6, + 0x2022, + 0x201a, + 0x201e, + 0x201d, + 0x00bb, + 0x2026, + 0x2030, + 0x00ac, + 0x00bf, + 0x00b9, + 0x02cb, + 0x00b4, + 0x02c6, + 0x02dc, + 0x00af, + 0x02d8, + 0x02d9, + 0x00a8, + 0x00b2, + 0x02da, + 0x00b8, + 0x00b3, + 0x02dd, + 0x02db, + 0x02c7, + 0x2014, + 0x00b1, + 0x00bc, + 0x00bd, + 0x00be, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00c6, + 0x00ed, + 0x00aa, + 0x00ee, + 0x00ef, + 0x00f0, + 0x00f1, + 0x0141, + 0x00d8, + 0x0152, + 0x00ba, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00e6, + 0x00f9, + 0x00fa, + 0x00fb, + 0x0131, + 0x00fc, + 0x00fd, + 0x0142, + 0x00f8, + 0x0153, + 0x00df, + 0x00fe, + 0x00ff, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xc2\xa0", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x90", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x9d", + "\xc3\x9e", + "\xc2\xb5", + "\xc3\x97", + "\xc3\xb7", + "\xc2\xa9", + "\xc2\xa1", + "\xc2\xa2", + "\xc2\xa3", + "\xe2\x81\x84", + "\xc2\xa5", + "\xc6\x92", + "\xc2\xa7", + "\xc2\xa4", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xc2\xab", + "\xe2\x80\xb9", + "\xe2\x80\xba", + "\xef\xac\x81", + "\xef\xac\x82", + "\xc2\xae", + "\xe2\x80\x93", + "\xe2\x80\xa0", + "\xe2\x80\xa1", + "\xc2\xb7", + "\xc2\xa6", + "\xc2\xb6", + "\xe2\x80\xa2", + "\xe2\x80\x9a", + "\xe2\x80\x9e", + "\xe2\x80\x9d", + "\xc2\xbb", + "\xe2\x80\xa6", + "\xe2\x80\xb0", + "\xc2\xac", + "\xc2\xbf", + "\xc2\xb9", + "\xcb\x8b", + "\xc2\xb4", + "\xcb\x86", + "\xcb\x9c", + "\xc2\xaf", + "\xcb\x98", + "\xcb\x99", + "\xc2\xa8", + "\xc2\xb2", + "\xcb\x9a", + "\xc2\xb8", + "\xc2\xb3", + "\xcb\x9d", + "\xcb\x9b", + "\xcb\x87", + "\xe2\x80\x94", + "\xc2\xb1", + "\xc2\xbc", + "\xc2\xbd", + "\xc2\xbe", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\x86", + "\xc3\xad", + "\xc2\xaa", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb0", + "\xc3\xb1", + "\xc5\x81", + "\xc3\x98", + "\xc5\x92", + "\xc2\xba", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xa6", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc4\xb1", + "\xc3\xbc", + "\xc3\xbd", + "\xc5\x82", + "\xc3\xb8", + "\xc5\x93", + "\xc3\x9f", + "\xc3\xbe", + "\xc3\xbf", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\x80", + 0x000000a1 => "\xa1", + 0x000000a2 => "\xa2", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa8", + 0x000000a5 => "\xa5", + 0x000000a6 => "\xb5", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xc8", + 0x000000a9 => "\xa0", + 0x000000aa => "\xe3", + 0x000000ab => "\xab", + 0x000000ac => "\xbe", + 0x000000ae => "\xb0", + 0x000000af => "\xc5", + 0x000000b1 => "\xd1", + 0x000000b2 => "\xc9", + 0x000000b3 => "\xcc", + 0x000000b4 => "\xc2", + 0x000000b5 => "\x9d", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb4", + 0x000000b8 => "\xcb", + 0x000000b9 => "\xc0", + 0x000000ba => "\xeb", + 0x000000bb => "\xbb", + 0x000000bc => "\xd2", + 0x000000bd => "\xd3", + 0x000000be => "\xd4", + 0x000000bf => "\xbf", + 0x000000c0 => "\x81", + 0x000000c1 => "\x82", + 0x000000c2 => "\x83", + 0x000000c3 => "\x84", + 0x000000c4 => "\x85", + 0x000000c5 => "\x86", + 0x000000c6 => "\xe1", + 0x000000c7 => "\x87", + 0x000000c8 => "\x88", + 0x000000c9 => "\x89", + 0x000000ca => "\x8a", + 0x000000cb => "\x8b", + 0x000000cc => "\x8c", + 0x000000cd => "\x8d", + 0x000000ce => "\x8e", + 0x000000cf => "\x8f", + 0x000000d0 => "\x90", + 0x000000d1 => "\x91", + 0x000000d2 => "\x92", + 0x000000d3 => "\x93", + 0x000000d4 => "\x94", + 0x000000d5 => "\x95", + 0x000000d6 => "\x96", + 0x000000d7 => "\x9e", + 0x000000d8 => "\xe9", + 0x000000d9 => "\x97", + 0x000000da => "\x98", + 0x000000db => "\x99", + 0x000000dc => "\x9a", + 0x000000dd => "\x9b", + 0x000000de => "\x9c", + 0x000000df => "\xfb", + 0x000000e0 => "\xd5", + 0x000000e1 => "\xd6", + 0x000000e2 => "\xd7", + 0x000000e3 => "\xd8", + 0x000000e4 => "\xd9", + 0x000000e5 => "\xda", + 0x000000e6 => "\xf1", + 0x000000e7 => "\xdb", + 0x000000e8 => "\xdc", + 0x000000e9 => "\xdd", + 0x000000ea => "\xde", + 0x000000eb => "\xdf", + 0x000000ec => "\xe0", + 0x000000ed => "\xe2", + 0x000000ee => "\xe4", + 0x000000ef => "\xe5", + 0x000000f0 => "\xe6", + 0x000000f1 => "\xe7", + 0x000000f2 => "\xec", + 0x000000f3 => "\xed", + 0x000000f4 => "\xee", + 0x000000f5 => "\xef", + 0x000000f6 => "\xf0", + 0x000000f7 => "\x9f", + 0x000000f8 => "\xf9", + 0x000000f9 => "\xf2", + 0x000000fa => "\xf3", + 0x000000fb => "\xf4", + 0x000000fc => "\xf6", + 0x000000fd => "\xf7", + 0x000000fe => "\xfc", + 0x000000ff => "\xfd", + 0x00000131 => "\xf5", + 0x00000141 => "\xe8", + 0x00000142 => "\xf8", + 0x00000152 => "\xea", + 0x00000153 => "\xfa", + 0x00000192 => "\xa6", + 0x000002c6 => "\xc3", + 0x000002c7 => "\xcf", + 0x000002cb => "\xc1", + 0x000002d8 => "\xc6", + 0x000002d9 => "\xc7", + 0x000002da => "\xca", + 0x000002db => "\xce", + 0x000002dc => "\xc4", + 0x000002dd => "\xcd", + 0x00002013 => "\xb1", + 0x00002014 => "\xd0", + 0x00002019 => "\xa9", + 0x0000201a => "\xb8", + 0x0000201c => "\xaa", + 0x0000201d => "\xba", + 0x0000201e => "\xb9", + 0x00002020 => "\xb2", + 0x00002021 => "\xb3", + 0x00002022 => "\xb7", + 0x00002026 => "\xbc", + 0x00002030 => "\xbd", + 0x00002039 => "\xac", + 0x0000203a => "\xad", + 0x00002044 => "\xa4", + 0x0000fb01 => "\xae", + 0x0000fb02 => "\xaf", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::NEXTSTEP - Conversion routines for NEXTSTEP + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for NEXTSTEP. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + + This charmap has been generated automatically from GNU libiconv + conversions. + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000000A0 | NO-BREAK SPACE + 81 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + 82 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + 83 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 84 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + 85 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + 86 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + 87 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + 88 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + 89 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + 8A | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 8B | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + 8C | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + 8D | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + 8E | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 8F | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + 90 | 000000D0 | LATIN CAPITAL LETTER ETH + 91 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + 92 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + 93 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + 94 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 95 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + 96 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + 97 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + 98 | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + 99 | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 9A | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + 9B | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + 9C | 000000DE | LATIN CAPITAL LETTER THORN + 9D | 000000B5 | MICRO SIGN + 9E | 000000D7 | MULTIPLICATION SIGN + 9F | 000000F7 | DIVISION SIGN + A0 | 000000A9 | COPYRIGHT SIGN + A1 | 000000A1 | INVERTED EXCLAMATION MARK + A2 | 000000A2 | CENT SIGN + A3 | 000000A3 | POUND SIGN + A4 | 00002044 | FRACTION SLASH + A5 | 000000A5 | YEN SIGN + A6 | 00000192 | LATIN SMALL LETTER F WITH HOOK + A7 | 000000A7 | SECTION SIGN + A8 | 000000A4 | CURRENCY SIGN + A9 | 00002019 | RIGHT SINGLE QUOTATION MARK + AA | 0000201C | LEFT DOUBLE QUOTATION MARK + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + AD | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + AE | 0000FB01 | LATIN SMALL LIGATURE FI + AF | 0000FB02 | LATIN SMALL LIGATURE FL + B0 | 000000AE | REGISTERED SIGN + B1 | 00002013 | EN DASH + B2 | 00002020 | DAGGER + B3 | 00002021 | DOUBLE DAGGER + B4 | 000000B7 | MIDDLE DOT + B5 | 000000A6 | BROKEN BAR + B6 | 000000B6 | PILCROW SIGN + B7 | 00002022 | BULLET + B8 | 0000201A | SINGLE LOW-9 QUOTATION MARK + B9 | 0000201E | DOUBLE LOW-9 QUOTATION MARK + BA | 0000201D | RIGHT DOUBLE QUOTATION MARK + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 00002026 | HORIZONTAL ELLIPSIS + BD | 00002030 | PER MILLE SIGN + BE | 000000AC | NOT SIGN + BF | 000000BF | INVERTED QUESTION MARK + C0 | 000000B9 | SUPERSCRIPT ONE + C1 | 000002CB | MODIFIER LETTER GRAVE ACCENT + C2 | 000000B4 | ACUTE ACCENT + C3 | 000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT + C4 | 000002DC | SMALL TILDE + C5 | 000000AF | MACRON + C6 | 000002D8 | BREVE + C7 | 000002D9 | DOT ABOVE + C8 | 000000A8 | DIAERESIS + C9 | 000000B2 | SUPERSCRIPT TWO + CA | 000002DA | RING ABOVE + CB | 000000B8 | CEDILLA + CC | 000000B3 | SUPERSCRIPT THREE + CD | 000002DD | DOUBLE ACUTE ACCENT + CE | 000002DB | OGONEK + CF | 000002C7 | CARON + D0 | 00002014 | EM DASH + D1 | 000000B1 | PLUS-MINUS SIGN + D2 | 000000BC | VULGAR FRACTION ONE QUARTER + D3 | 000000BD | VULGAR FRACTION ONE HALF + D4 | 000000BE | VULGAR FRACTION THREE QUARTERS + D5 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + D6 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + D7 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + D8 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + D9 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + DA | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + DB | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + DC | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + DD | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + DE | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + DF | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + E0 | 000000EC | LATIN SMALL LETTER I WITH GRAVE + E1 | 000000C6 | LATIN CAPITAL LETTER AE + E2 | 000000ED | LATIN SMALL LETTER I WITH ACUTE + E3 | 000000AA | FEMININE ORDINAL INDICATOR + E4 | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + E5 | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + E6 | 000000F0 | LATIN SMALL LETTER ETH + E7 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + E8 | 00000141 | LATIN CAPITAL LETTER L WITH STROKE + E9 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + EA | 00000152 | LATIN CAPITAL LIGATURE OE + EB | 000000BA | MASCULINE ORDINAL INDICATOR + EC | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + ED | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + EE | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + EF | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F0 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F1 | 000000E6 | LATIN SMALL LETTER AE + F2 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + F3 | 000000FA | LATIN SMALL LETTER U WITH ACUTE + F4 | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + F5 | 00000131 | LATIN SMALL LETTER DOTLESS I + F6 | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + F7 | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + F8 | 00000142 | LATIN SMALL LETTER L WITH STROKE + F9 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + FA | 00000153 | LATIN SMALL LIGATURE OE + FB | 000000DF | LATIN SMALL LETTER SHARP S + FC | 000000FE | LATIN SMALL LETTER THORN + FD | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/SAMI_WS2.pm b/lib/Locale/RecodeData/SAMI_WS2.pm new file mode 100644 index 0000000..bbfcdb3 --- /dev/null +++ b/lib/Locale/RecodeData/SAMI_WS2.pm @@ -0,0 +1,1131 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for WIN-SAMI-2. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::SAMI_WS2; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0x20ac, + 0xfffd, + 0x010c, + 0x0192, + 0x010d, + 0x01b7, + 0x0292, + 0x01ee, + 0x01ef, + 0x0110, + 0x0160, + 0x2039, + 0x0152, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x2018, + 0x2019, + 0x201c, + 0x201d, + 0x2022, + 0x2013, + 0x2014, + 0x0111, + 0x01e6, + 0x0161, + 0x203a, + 0x0153, + 0xfffd, + 0xfffd, + 0x0178, + 0x00a0, + 0x01e7, + 0x01e4, + 0x00a3, + 0x00a4, + 0x01e5, + 0x00a6, + 0x00a7, + 0x00a8, + 0x00a9, + 0x021e, + 0x00ab, + 0x00ac, + 0x00ad, + 0x00ae, + 0x021f, + 0x00b0, + 0x00b1, + 0x01e8, + 0x01e9, + 0x00b4, + 0x00b5, + 0x00b6, + 0x00b7, + 0x014a, + 0x014b, + 0x0166, + 0x00bb, + 0x0167, + 0x00bd, + 0x017d, + 0x017e, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x00c4, + 0x00c5, + 0x00c6, + 0x00c7, + 0x00c8, + 0x00c9, + 0x00ca, + 0x00cb, + 0x00cc, + 0x00cd, + 0x00ce, + 0x00cf, + 0x00d0, + 0x00d1, + 0x00d2, + 0x00d3, + 0x00d4, + 0x00d5, + 0x00d6, + 0x00d7, + 0x00d8, + 0x00d9, + 0x00da, + 0x00db, + 0x00dc, + 0x00dd, + 0x00de, + 0x00df, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x00e4, + 0x00e5, + 0x00e6, + 0x00e7, + 0x00e8, + 0x00e9, + 0x00ea, + 0x00eb, + 0x00ec, + 0x00ed, + 0x00ee, + 0x00ef, + 0x00f0, + 0x00f1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x00f6, + 0x00f7, + 0x00f8, + 0x00f9, + 0x00fa, + 0x00fb, + 0x00fc, + 0x00fd, + 0x00fe, + 0x00ff, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe2\x82\xac", + "\xef\xbf\xbd", + "\xc4\x8c", + "\xc6\x92", + "\xc4\x8d", + "\xc6\xb7", + "\xca\x92", + "\xc7\xae", + "\xc7\xaf", + "\xc4\x90", + "\xc5\xa0", + "\xe2\x80\xb9", + "\xc5\x92", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe2\x80\x98", + "\xe2\x80\x99", + "\xe2\x80\x9c", + "\xe2\x80\x9d", + "\xe2\x80\xa2", + "\xe2\x80\x93", + "\xe2\x80\x94", + "\xc4\x91", + "\xc7\xa6", + "\xc5\xa1", + "\xe2\x80\xba", + "\xc5\x93", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xc5\xb8", + "\xc2\xa0", + "\xc7\xa7", + "\xc7\xa4", + "\xc2\xa3", + "\xc2\xa4", + "\xc7\xa5", + "\xc2\xa6", + "\xc2\xa7", + "\xc2\xa8", + "\xc2\xa9", + "\xc8\x9e", + "\xc2\xab", + "\xc2\xac", + "\xc2\xad", + "\xc2\xae", + "\xc8\x9f", + "\xc2\xb0", + "\xc2\xb1", + "\xc7\xa8", + "\xc7\xa9", + "\xc2\xb4", + "\xc2\xb5", + "\xc2\xb6", + "\xc2\xb7", + "\xc5\x8a", + "\xc5\x8b", + "\xc5\xa6", + "\xc2\xbb", + "\xc5\xa7", + "\xc2\xbd", + "\xc5\xbd", + "\xc5\xbe", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xc3\x84", + "\xc3\x85", + "\xc3\x86", + "\xc3\x87", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xc3\x8b", + "\xc3\x8c", + "\xc3\x8d", + "\xc3\x8e", + "\xc3\x8f", + "\xc3\x90", + "\xc3\x91", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xc3\x95", + "\xc3\x96", + "\xc3\x97", + "\xc3\x98", + "\xc3\x99", + "\xc3\x9a", + "\xc3\x9b", + "\xc3\x9c", + "\xc3\x9d", + "\xc3\x9e", + "\xc3\x9f", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xc3\xa4", + "\xc3\xa5", + "\xc3\xa6", + "\xc3\xa7", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xc3\xab", + "\xc3\xac", + "\xc3\xad", + "\xc3\xae", + "\xc3\xaf", + "\xc3\xb0", + "\xc3\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xc3\xb6", + "\xc3\xb7", + "\xc3\xb8", + "\xc3\xb9", + "\xc3\xba", + "\xc3\xbb", + "\xc3\xbc", + "\xc3\xbd", + "\xc3\xbe", + "\xc3\xbf", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000a0 => "\xa0", + 0x000000a3 => "\xa3", + 0x000000a4 => "\xa4", + 0x000000a6 => "\xa6", + 0x000000a7 => "\xa7", + 0x000000a8 => "\xa8", + 0x000000a9 => "\xa9", + 0x000000ab => "\xab", + 0x000000ac => "\xac", + 0x000000ad => "\xad", + 0x000000ae => "\xae", + 0x000000b0 => "\xb0", + 0x000000b1 => "\xb1", + 0x000000b4 => "\xb4", + 0x000000b5 => "\xb5", + 0x000000b6 => "\xb6", + 0x000000b7 => "\xb7", + 0x000000bb => "\xbb", + 0x000000bd => "\xbd", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c4 => "\xc4", + 0x000000c5 => "\xc5", + 0x000000c6 => "\xc6", + 0x000000c7 => "\xc7", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cb => "\xcb", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000ce => "\xce", + 0x000000cf => "\xcf", + 0x000000d0 => "\xd0", + 0x000000d1 => "\xd1", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xd5", + 0x000000d6 => "\xd6", + 0x000000d7 => "\xd7", + 0x000000d8 => "\xd8", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000db => "\xdb", + 0x000000dc => "\xdc", + 0x000000dd => "\xdd", + 0x000000de => "\xde", + 0x000000df => "\xdf", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e4 => "\xe4", + 0x000000e5 => "\xe5", + 0x000000e6 => "\xe6", + 0x000000e7 => "\xe7", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000eb => "\xeb", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000ee => "\xee", + 0x000000ef => "\xef", + 0x000000f0 => "\xf0", + 0x000000f1 => "\xf1", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f6 => "\xf6", + 0x000000f7 => "\xf7", + 0x000000f8 => "\xf8", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fb => "\xfb", + 0x000000fc => "\xfc", + 0x000000fd => "\xfd", + 0x000000fe => "\xfe", + 0x000000ff => "\xff", + 0x0000010c => "\x82", + 0x0000010d => "\x84", + 0x00000110 => "\x89", + 0x00000111 => "\x98", + 0x0000014a => "\xb8", + 0x0000014b => "\xb9", + 0x00000152 => "\x8c", + 0x00000153 => "\x9c", + 0x00000160 => "\x8a", + 0x00000161 => "\x9a", + 0x00000166 => "\xba", + 0x00000167 => "\xbc", + 0x00000178 => "\x9f", + 0x0000017d => "\xbe", + 0x0000017e => "\xbf", + 0x00000192 => "\x83", + 0x000001b7 => "\x85", + 0x000001e4 => "\xa2", + 0x000001e5 => "\xa5", + 0x000001e6 => "\x99", + 0x000001e7 => "\xa1", + 0x000001e8 => "\xb2", + 0x000001e9 => "\xb3", + 0x000001ee => "\x87", + 0x000001ef => "\x88", + 0x0000021e => "\xaa", + 0x0000021f => "\xaf", + 0x00000292 => "\x86", + 0x00002013 => "\x96", + 0x00002014 => "\x97", + 0x00002018 => "\x91", + 0x00002019 => "\x92", + 0x0000201c => "\x93", + 0x0000201d => "\x94", + 0x00002022 => "\x95", + 0x00002039 => "\x8b", + 0x0000203a => "\x9b", + 0x000020ac => "\x80", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::SAMI_WS2 - Conversion routines for SAMI_WS2 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for WIN-SAMI-2. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + source: EURL:http://www2.isl.uit.no/trond/ws2t.htmlE and + EURL:http://www.unicode.org/unicode/alloc/Pipeline.htmlE + author: Petter Reinholdtsen Epere@td.org.uit.noE + date: 1999-01-20 + based on info from Trond Trosterud ETrond.Trosterud@hum.uit.noE. + This charmap is based on MS CP1252, not ISO 8859/1. + alias WS2 + alias WINDOWS-SAMI2 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 000020AC | EURO SIGN + 82 | 0000010C | LATIN CAPITAL LETTER C WITH CARON + 83 | 00000192 | LATIN SMALL LETTER F WITH HOOK + 84 | 0000010D | LATIN SMALL LETTER C WITH CARON + 85 | 000001B7 | LATIN CAPITAL LETTER EZH + 86 | 00000292 | LATIN SMALL LETTER EZH + 87 | 000001EE | LATIN CAPITAL LETTER EZH WITH CARON + 88 | 000001EF | LATIN SMALL LETTER EZH WITH CARON + 89 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + 8A | 00000160 | LATIN CAPITAL LETTER S WITH CARON + 8B | 00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 8C | 00000152 | LATIN CAPITAL LIGATURE OE + 91 | 00002018 | LEFT SINGLE QUOTATION MARK + 92 | 00002019 | RIGHT SINGLE QUOTATION MARK + 93 | 0000201C | LEFT DOUBLE QUOTATION MARK + 94 | 0000201D | RIGHT DOUBLE QUOTATION MARK + 95 | 00002022 | BULLET + 96 | 00002013 | EN DASH + 97 | 00002014 | EM DASH + 98 | 00000111 | LATIN SMALL LETTER D WITH STROKE + 99 | 000001E6 | LATIN CAPITAL LETTER G WITH CARON + 9A | 00000161 | LATIN SMALL LETTER S WITH CARON + 9B | 0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 9C | 00000153 | LATIN SMALL LIGATURE OE + 9F | 00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS + A0 | 000000A0 | NO-BREAK SPACE + A1 | 000001E7 | LATIN SMALL LETTER G WITH CARON + A2 | 000001E4 | LATIN CAPITAL LETTER G WITH STROKE + A3 | 000000A3 | POUND SIGN + A4 | 000000A4 | CURRENCY SIGN + A5 | 000001E5 | LATIN SMALL LETTER G WITH STROKE + A6 | 000000A6 | BROKEN BAR + A7 | 000000A7 | SECTION SIGN + A8 | 000000A8 | DIAERESIS + A9 | 000000A9 | COPYRIGHT SIGN + AA | 0000021E | LATIN CAPITAL LETTER H WITH CARON + AB | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + AC | 000000AC | NOT SIGN + AD | 000000AD | SOFT HYPHEN + AE | 000000AE | REGISTERED SIGN + AF | 0000021F | LATIN SMALL LETTER H WITH CARON + B0 | 000000B0 | DEGREE SIGN + B1 | 000000B1 | PLUS-MINUS SIGN + B2 | 000001E8 | LATIN CAPITAL LETTER K WITH CARON + B3 | 000001E9 | LATIN SMALL LETTER K WITH CARON + B4 | 000000B4 | ACUTE ACCENT + B5 | 000000B5 | MICRO SIGN + B6 | 000000B6 | PILCROW SIGN + B7 | 000000B7 | MIDDLE DOT + B8 | 0000014A | LATIN CAPITAL LETTER ENG (Sami) + B9 | 0000014B | LATIN SMALL LETTER ENG (Sami) + BA | 00000166 | LATIN CAPITAL LETTER T WITH STROKE + BB | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + BC | 00000167 | LATIN SMALL LETTER T WITH STROKE + BD | 000000BD | VULGAR FRACTION ONE HALF + BE | 0000017D | LATIN CAPITAL LETTER Z WITH CARON + BF | 0000017E | LATIN SMALL LETTER Z WITH CARON + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS + C5 | 000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE + C6 | 000000C6 | LATIN CAPITAL LETTER AE + C7 | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX + CF | 000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS + D0 | 000000D0 | LATIN CAPITAL LETTER ETH (Icelandic) + D1 | 000000D1 | LATIN CAPITAL LETTER N WITH TILDE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + D6 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS + D7 | 000000D7 | MULTIPLICATION SIGN + D8 | 000000D8 | LATIN CAPITAL LETTER O WITH STROKE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX + DC | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 000000DE | LATIN CAPITAL LETTER THORN (Icelandic) + DF | 000000DF | LATIN SMALL LETTER SHARP S (German) + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS + E5 | 000000E5 | LATIN SMALL LETTER A WITH RING ABOVE + E6 | 000000E6 | LATIN SMALL LETTER AE + E7 | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX + EF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS + F0 | 000000F0 | LATIN SMALL LETTER ETH (Icelandic) + F1 | 000000F1 | LATIN SMALL LETTER N WITH TILDE + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS + F7 | 000000F7 | DIVISION SIGN + F8 | 000000F8 | LATIN SMALL LETTER O WITH STROKE + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX + FC | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 000000FE | LATIN SMALL LETTER THORN (Icelandic) + FF | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/TIS_620.pm b/lib/Locale/RecodeData/TIS_620.pm new file mode 100644 index 0000000..c845e83 --- /dev/null +++ b/lib/Locale/RecodeData/TIS_620.pm @@ -0,0 +1,1062 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for TIS-620. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::TIS_620; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 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, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0e01, + 0x0e02, + 0x0e03, + 0x0e04, + 0x0e05, + 0x0e06, + 0x0e07, + 0x0e08, + 0x0e09, + 0x0e0a, + 0x0e0b, + 0x0e0c, + 0x0e0d, + 0x0e0e, + 0x0e0f, + 0x0e10, + 0x0e11, + 0x0e12, + 0x0e13, + 0x0e14, + 0x0e15, + 0x0e16, + 0x0e17, + 0x0e18, + 0x0e19, + 0x0e1a, + 0x0e1b, + 0x0e1c, + 0x0e1d, + 0x0e1e, + 0x0e1f, + 0x0e20, + 0x0e21, + 0x0e22, + 0x0e23, + 0x0e24, + 0x0e25, + 0x0e26, + 0x0e27, + 0x0e28, + 0x0e29, + 0x0e2a, + 0x0e2b, + 0x0e2c, + 0x0e2d, + 0x0e2e, + 0x0e2f, + 0x0e30, + 0x0e31, + 0x0e32, + 0x0e33, + 0x0e34, + 0x0e35, + 0x0e36, + 0x0e37, + 0x0e38, + 0x0e39, + 0x0e3a, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, + 0x0e3f, + 0x0e40, + 0x0e41, + 0x0e42, + 0x0e43, + 0x0e44, + 0x0e45, + 0x0e46, + 0x0e47, + 0x0e48, + 0x0e49, + 0x0e4a, + 0x0e4b, + 0x0e4c, + 0x0e4d, + 0x0e4e, + 0x0e4f, + 0x0e50, + 0x0e51, + 0x0e52, + 0x0e53, + 0x0e54, + 0x0e55, + 0x0e56, + 0x0e57, + 0x0e58, + 0x0e59, + 0x0e5a, + 0x0e5b, + 0xfffd, + 0xfffd, + 0xfffd, + 0xfffd, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\x02", + "\x03", + "\x04", + "\x05", + "\x06", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\x14", + "\x15", + "\x16", + "\x17", + "\x18", + "\x19", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\x1e", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe0\xb8\x81", + "\xe0\xb8\x82", + "\xe0\xb8\x83", + "\xe0\xb8\x84", + "\xe0\xb8\x85", + "\xe0\xb8\x86", + "\xe0\xb8\x87", + "\xe0\xb8\x88", + "\xe0\xb8\x89", + "\xe0\xb8\x8a", + "\xe0\xb8\x8b", + "\xe0\xb8\x8c", + "\xe0\xb8\x8d", + "\xe0\xb8\x8e", + "\xe0\xb8\x8f", + "\xe0\xb8\x90", + "\xe0\xb8\x91", + "\xe0\xb8\x92", + "\xe0\xb8\x93", + "\xe0\xb8\x94", + "\xe0\xb8\x95", + "\xe0\xb8\x96", + "\xe0\xb8\x97", + "\xe0\xb8\x98", + "\xe0\xb8\x99", + "\xe0\xb8\x9a", + "\xe0\xb8\x9b", + "\xe0\xb8\x9c", + "\xe0\xb8\x9d", + "\xe0\xb8\x9e", + "\xe0\xb8\x9f", + "\xe0\xb8\xa0", + "\xe0\xb8\xa1", + "\xe0\xb8\xa2", + "\xe0\xb8\xa3", + "\xe0\xb8\xa4", + "\xe0\xb8\xa5", + "\xe0\xb8\xa6", + "\xe0\xb8\xa7", + "\xe0\xb8\xa8", + "\xe0\xb8\xa9", + "\xe0\xb8\xaa", + "\xe0\xb8\xab", + "\xe0\xb8\xac", + "\xe0\xb8\xad", + "\xe0\xb8\xae", + "\xe0\xb8\xaf", + "\xe0\xb8\xb0", + "\xe0\xb8\xb1", + "\xe0\xb8\xb2", + "\xe0\xb8\xb3", + "\xe0\xb8\xb4", + "\xe0\xb8\xb5", + "\xe0\xb8\xb6", + "\xe0\xb8\xb7", + "\xe0\xb8\xb8", + "\xe0\xb8\xb9", + "\xe0\xb8\xba", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xe0\xb8\xbf", + "\xe0\xb9\x80", + "\xe0\xb9\x81", + "\xe0\xb9\x82", + "\xe0\xb9\x83", + "\xe0\xb9\x84", + "\xe0\xb9\x85", + "\xe0\xb9\x86", + "\xe0\xb9\x87", + "\xe0\xb9\x88", + "\xe0\xb9\x89", + "\xe0\xb9\x8a", + "\xe0\xb9\x8b", + "\xe0\xb9\x8c", + "\xe0\xb9\x8d", + "\xe0\xb9\x8e", + "\xe0\xb9\x8f", + "\xe0\xb9\x90", + "\xe0\xb9\x91", + "\xe0\xb9\x92", + "\xe0\xb9\x93", + "\xe0\xb9\x94", + "\xe0\xb9\x95", + "\xe0\xb9\x96", + "\xe0\xb9\x97", + "\xe0\xb9\x98", + "\xe0\xb9\x99", + "\xe0\xb9\x9a", + "\xe0\xb9\x9b", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", + "\xef\xbf\xbd", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000002 => "\x02", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000005 => "\x05", + 0x00000006 => "\x06", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000014 => "\x14", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x00000019 => "\x19", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001e => "\x1e", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x00000e01 => "\xa1", + 0x00000e02 => "\xa2", + 0x00000e03 => "\xa3", + 0x00000e04 => "\xa4", + 0x00000e05 => "\xa5", + 0x00000e06 => "\xa6", + 0x00000e07 => "\xa7", + 0x00000e08 => "\xa8", + 0x00000e09 => "\xa9", + 0x00000e0a => "\xaa", + 0x00000e0b => "\xab", + 0x00000e0c => "\xac", + 0x00000e0d => "\xad", + 0x00000e0e => "\xae", + 0x00000e0f => "\xaf", + 0x00000e10 => "\xb0", + 0x00000e11 => "\xb1", + 0x00000e12 => "\xb2", + 0x00000e13 => "\xb3", + 0x00000e14 => "\xb4", + 0x00000e15 => "\xb5", + 0x00000e16 => "\xb6", + 0x00000e17 => "\xb7", + 0x00000e18 => "\xb8", + 0x00000e19 => "\xb9", + 0x00000e1a => "\xba", + 0x00000e1b => "\xbb", + 0x00000e1c => "\xbc", + 0x00000e1d => "\xbd", + 0x00000e1e => "\xbe", + 0x00000e1f => "\xbf", + 0x00000e20 => "\xc0", + 0x00000e21 => "\xc1", + 0x00000e22 => "\xc2", + 0x00000e23 => "\xc3", + 0x00000e24 => "\xc4", + 0x00000e25 => "\xc5", + 0x00000e26 => "\xc6", + 0x00000e27 => "\xc7", + 0x00000e28 => "\xc8", + 0x00000e29 => "\xc9", + 0x00000e2a => "\xca", + 0x00000e2b => "\xcb", + 0x00000e2c => "\xcc", + 0x00000e2d => "\xcd", + 0x00000e2e => "\xce", + 0x00000e2f => "\xcf", + 0x00000e30 => "\xd0", + 0x00000e31 => "\xd1", + 0x00000e32 => "\xd2", + 0x00000e33 => "\xd3", + 0x00000e34 => "\xd4", + 0x00000e35 => "\xd5", + 0x00000e36 => "\xd6", + 0x00000e37 => "\xd7", + 0x00000e38 => "\xd8", + 0x00000e39 => "\xd9", + 0x00000e3a => "\xda", + 0x00000e3f => "\xdf", + 0x00000e40 => "\xe0", + 0x00000e41 => "\xe1", + 0x00000e42 => "\xe2", + 0x00000e43 => "\xe3", + 0x00000e44 => "\xe4", + 0x00000e45 => "\xe5", + 0x00000e46 => "\xe6", + 0x00000e47 => "\xe7", + 0x00000e48 => "\xe8", + 0x00000e49 => "\xe9", + 0x00000e4a => "\xea", + 0x00000e4b => "\xeb", + 0x00000e4c => "\xec", + 0x00000e4d => "\xed", + 0x00000e4e => "\xee", + 0x00000e4f => "\xef", + 0x00000e50 => "\xf0", + 0x00000e51 => "\xf1", + 0x00000e52 => "\xf2", + 0x00000e53 => "\xf3", + 0x00000e54 => "\xf4", + 0x00000e55 => "\xf5", + 0x00000e56 => "\xf6", + 0x00000e57 => "\xf7", + 0x00000e58 => "\xf8", + 0x00000e59 => "\xf9", + 0x00000e5a => "\xfa", + 0x00000e5b => "\xfb", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::TIS_620 - Conversion routines for TIS-620 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for TIS-620. + +=head1 COMMENTS + +The following comments have been extracted from the original charmap: + + version: 1.0 + sources: Thai Industrial Standards Institute, ECMA registry, IANA + alias TIS620 + alias TIS620-0 + alias TIS620.2529-1 + alias TIS620.2533-0 + alias ISO-IR-166 + +Please note that aliases listed above are not necessarily valid! + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + A1 | 00000E01 | THAI CHARACTER KO KAI + A2 | 00000E02 | THAI CHARACTER KHO KHAI + A3 | 00000E03 | THAI CHARACTER KHO KHUAT + A4 | 00000E04 | THAI CHARACTER KHO KHWAI + A5 | 00000E05 | THAI CHARACTER KHO KHON + A6 | 00000E06 | THAI CHARACTER KHO RAKHANG + A7 | 00000E07 | THAI CHARACTER NGO NGU + A8 | 00000E08 | THAI CHARACTER CHO CHAN + A9 | 00000E09 | THAI CHARACTER CHO CHING + AA | 00000E0A | THAI CHARACTER CHO CHANG + AB | 00000E0B | THAI CHARACTER SO SO + AC | 00000E0C | THAI CHARACTER CHO CHOE + AD | 00000E0D | THAI CHARACTER YO YING + AE | 00000E0E | THAI CHARACTER DO CHADA + AF | 00000E0F | THAI CHARACTER TO PATAK + B0 | 00000E10 | THAI CHARACTER THO THAN + B1 | 00000E11 | THAI CHARACTER THO NANGMONTHO + B2 | 00000E12 | THAI CHARACTER THO PHUTHAO + B3 | 00000E13 | THAI CHARACTER NO NEN + B4 | 00000E14 | THAI CHARACTER DO DEK + B5 | 00000E15 | THAI CHARACTER TO TAO + B6 | 00000E16 | THAI CHARACTER THO THUNG + B7 | 00000E17 | THAI CHARACTER THO THAHAN + B8 | 00000E18 | THAI CHARACTER THO THONG + B9 | 00000E19 | THAI CHARACTER NO NU + BA | 00000E1A | THAI CHARACTER BO BAIMAI + BB | 00000E1B | THAI CHARACTER PO PLA + BC | 00000E1C | THAI CHARACTER PHO PHUNG + BD | 00000E1D | THAI CHARACTER FO FA + BE | 00000E1E | THAI CHARACTER PHO PHAN + BF | 00000E1F | THAI CHARACTER FO FAN + C0 | 00000E20 | THAI CHARACTER PHO SAMPHAO + C1 | 00000E21 | THAI CHARACTER MO MA + C2 | 00000E22 | THAI CHARACTER YO YAK + C3 | 00000E23 | THAI CHARACTER RO RUA + C4 | 00000E24 | THAI CHARACTER RU + C5 | 00000E25 | THAI CHARACTER LO LING + C6 | 00000E26 | THAI CHARACTER LU + C7 | 00000E27 | THAI CHARACTER WO WAEN + C8 | 00000E28 | THAI CHARACTER SO SALA + C9 | 00000E29 | THAI CHARACTER SO RUSI + CA | 00000E2A | THAI CHARACTER SO SUA + CB | 00000E2B | THAI CHARACTER HO HIP + CC | 00000E2C | THAI CHARACTER LO CHULA + CD | 00000E2D | THAI CHARACTER O ANG + CE | 00000E2E | THAI CHARACTER HO NOKHUK + CF | 00000E2F | THAI CHARACTER PAIYANNOI + D0 | 00000E30 | THAI CHARACTER SARA A + D1 | 00000E31 | THAI CHARACTER MAI HAN-AKAT + D2 | 00000E32 | THAI CHARACTER SARA AA + D3 | 00000E33 | THAI CHARACTER SARA AM + D4 | 00000E34 | THAI CHARACTER SARA I + D5 | 00000E35 | THAI CHARACTER SARA II + D6 | 00000E36 | THAI CHARACTER SARA UE + D7 | 00000E37 | THAI CHARACTER SARA UEE + D8 | 00000E38 | THAI CHARACTER SARA U + D9 | 00000E39 | THAI CHARACTER SARA UU + DA | 00000E3A | THAI CHARACTER PHINTHU + DF | 00000E3F | THAI CHARACTER SYMBOL BAHT + E0 | 00000E40 | THAI CHARACTER SARA E + E1 | 00000E41 | THAI CHARACTER SARA AE + E2 | 00000E42 | THAI CHARACTER SARA O + E3 | 00000E43 | THAI CHARACTER SARA AI MAIMUAN + E4 | 00000E44 | THAI CHARACTER SARA AI MAIMALAI + E5 | 00000E45 | THAI CHARACTER LAKKHANGYAO + E6 | 00000E46 | THAI CHARACTER MAIYAMOK + E7 | 00000E47 | THAI CHARACTER MAITAIKHU + E8 | 00000E48 | THAI CHARACTER MAI EK + E9 | 00000E49 | THAI CHARACTER MAI THO + EA | 00000E4A | THAI CHARACTER MAI TRI + EB | 00000E4B | THAI CHARACTER MAI CHATTAWA + EC | 00000E4C | THAI CHARACTER THANTHAKHAT + ED | 00000E4D | THAI CHARACTER NIKHAHIT + EE | 00000E4E | THAI CHARACTER YAMAKKAN + EF | 00000E4F | THAI CHARACTER FONGMAN + F0 | 00000E50 | THAI DIGIT ZERO + F1 | 00000E51 | THAI DIGIT ONE + F2 | 00000E52 | THAI DIGIT TWO + F3 | 00000E53 | THAI DIGIT THREE + F4 | 00000E54 | THAI DIGIT FOUR + F5 | 00000E55 | THAI DIGIT FIVE + F6 | 00000E56 | THAI DIGIT SIX + F7 | 00000E57 | THAI DIGIT SEVEN + F8 | 00000E58 | THAI DIGIT EIGHT + F9 | 00000E59 | THAI DIGIT NINE + FA | 00000E5A | THAI CHARACTER ANGKHANKHU + FB | 00000E5B | THAI CHARACTER KHOMUT + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/US_ASCII.pm b/lib/Locale/RecodeData/US_ASCII.pm new file mode 100644 index 0000000..f6fed81 --- /dev/null +++ b/lib/Locale/RecodeData/US_ASCII.pm @@ -0,0 +1,223 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for US-ASCII. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::US_ASCII; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + # FIXME: Maybe the lookup is cheaper than the call to chr(). + $_[1] = join '', + map $_ > 0x7f ? '?' : chr $_, + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8') { + # FIXME: Maybe the lookup is cheaper than the call to chr(). + $_[1] = join '', + map $_ > 0x7f ? "\xef\xbf\xbd" : chr $_, unpack 'C*', $_[1]; + } else { + $_[1] = [ map { $_ > 0x7f ? 0xfffd : $_ } unpack 'C*', $_[1] ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::US_ASCII - Conversion routines for US-ASCII + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module contains the conversion tables and routines for US-ASCII. + +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00000002 | START OF TEXT (STX) + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00000005 | ENQUIRY (ENQ) + 06 | 00000006 | ACKNOWLEDGE (ACK) + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00000014 | DEVICE CONTROL FOUR (DC4) + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00000019 | END OF MEDIUM (EM) + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 0000001E | RECORD SEPARATOR (IS2) + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/UTF_8.pm b/lib/Locale/RecodeData/UTF_8.pm new file mode 100644 index 0000000..b5a149b --- /dev/null +++ b/lib/Locale/RecodeData/UTF_8.pm @@ -0,0 +1,190 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for UTF-8 (perl < 5.8.0). +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::UTF_8; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + return $_[0]->_fromInternal ($_[1]); + } else { + return $_[0]->_toInternal ($_[1]); + } +} + +# This routine assumes that the internal representation is always sane +# and contains valid codes only. +sub _fromInternal +{ + $_[1] = join '', map { + if ($_ <= 0x7f) { + chr $_; + } elsif ($_ <= 0x7ff) { + pack ("C2", + (0xc0 | (($_ >> 6) & 0x1f)), + (0x80 | ($_ & 0x3f))); + } elsif ($_ <= 0xffff) { + pack ("C3", + (0xe0 | (($_ >> 12) & 0xf)), + (0x80 | (($_ >> 6) & 0x3f)), + (0x80 | ($_ & 0x3f))); + } elsif ($_ <= 0x1fffff) { + pack ("C4", + (0xf0 | (($_ >> 18) & 0x7)), + (0x80 | (($_ >> 12) & 0x3f)), + (0x80 | (($_ >> 6) & 0x3f)), + (0x80 | ($_ & 0x3f))); + } elsif ($_ <= 0x3ffffff) { + pack ("C5", + (0xf0 | (($_ >> 24) & 0x3)), + (0x80 | (($_ >> 18) & 0x3f)), + (0x80 | (($_ >> 12) & 0x3f)), + (0x80 | (($_ >> 6) & 0x3f)), + (0x80 | ($_ & 0x3f))); + } else { + pack ("C6", + (0xf0 | (($_ >> 30) & 0x3)), + (0x80 | (($_ >> 24) & 0x1)), + (0x80 | (($_ >> 18) & 0x3f)), + (0x80 | (($_ >> 12) & 0x3f)), + (0x80 | (($_ >> 6) & 0x3f)), + (0x80 | ($_ & 0x3f))); + } + } @{$_[1]}; + return 1; +} + +# Decode UTF-8 into integers. We do not bother to care about possibly +# configured replacement characters here and simply fall back to 0xfffd. +# Rationale: the internal format is never output directly and the other +# encoders will handle the replacement character correctly. +sub _toInternal +{ + if ($] >= 5.006) { + $_[1] = [ unpack "U*", $_[1] ]; + return 1; + } + + # Sigh, we have to decode ourselves. FIXME: Should be optimized. + # The routine is awfully slow. + # It also does not necessarily detect illegal multi-byte sequences. + + my @chars = (); + my @bytes = unpack "C*", $_[1]; + + BYTE: while (@bytes) { + my $byte = shift @bytes; + if ($byte < 0x80) { + push @chars, $byte; + } elsif ($byte < 0xc0 || $byte > 0xfd) { + push @chars, 0xfffd; + } else { + my $num_bytes; + my $char; + if ($byte < 0xe0) { + $char = $byte & 0x1f; + $num_bytes = 1; + } elsif ($byte < 0xf0) { + $char = $byte & 0xf; + $num_bytes = 2; + } elsif ($byte < 0xf8) { + $char = $byte & 0x7; + $num_bytes = 3; + } elsif ($byte < 0xfc) { + $char = $byte & 0x3; + $num_bytes = 4; + } else { + $char = $byte & 0x1; + $num_bytes = 5; + } + for (my $i = 0; $i < $num_bytes; ++$i) { + my $next = shift @bytes; + if (!defined $next || $next < 0x80 || $next > 0xbf) { + push @chars, 0xfffd; + next BYTE; + } else { + $char <<= 6; + $char |= $next & 0x3f; + } + } + push @chars, $char; + } + } + + $_[1] = \@chars; + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::UTF_8 - Conversion routines for UTF-8 + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This modules contains the conversion tables for UTF-8. It is capable of +converting from UTF-8 to the internal format of libintl-perl and vice +versa. It is only suitable for Perl versions E= 5.8.0. However, +you do not have to bother about version checking, Locale::Recode(3) +will do that for you. + + +=head1 CHARACTER TABLE + +See http://www.unicode.org/. + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/VISCII.pm b/lib/Locale/RecodeData/VISCII.pm new file mode 100644 index 0000000..6bec6f8 --- /dev/null +++ b/lib/Locale/RecodeData/VISCII.pm @@ -0,0 +1,1129 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Conversion routines for VISCII. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::VISCII; + +use strict; + +require Locale::RecodeData; +use base qw(Locale::RecodeData); + +my @to_ucs4 = ( + 0x0000, + 0x0001, + 0x1eb2, + 0x0003, + 0x0004, + 0x1eb4, + 0x1eaa, + 0x0007, + 0x0008, + 0x0009, + 0x000a, + 0x000b, + 0x000c, + 0x000d, + 0x000e, + 0x000f, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x1ef6, + 0x0015, + 0x0016, + 0x0017, + 0x0018, + 0x1ef8, + 0x001a, + 0x001b, + 0x001c, + 0x001d, + 0x1ef4, + 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, + 0x1ea0, + 0x1eae, + 0x1eb0, + 0x1eb6, + 0x1ea4, + 0x1ea6, + 0x1ea8, + 0x1eac, + 0x1ebc, + 0x1eb8, + 0x1ebe, + 0x1ec0, + 0x1ec2, + 0x1ec4, + 0x1ec6, + 0x1ed0, + 0x1ed2, + 0x1ed4, + 0x1ed6, + 0x1ed8, + 0x1ee2, + 0x1eda, + 0x1edc, + 0x1ede, + 0x1eca, + 0x1ece, + 0x1ecc, + 0x1ec8, + 0x1ee6, + 0x0168, + 0x1ee4, + 0x1ef2, + 0x00d5, + 0x1eaf, + 0x1eb1, + 0x1eb7, + 0x1ea5, + 0x1ea7, + 0x1ea9, + 0x1ead, + 0x1ebd, + 0x1eb9, + 0x1ebf, + 0x1ec1, + 0x1ec3, + 0x1ec5, + 0x1ec7, + 0x1ed1, + 0x1ed3, + 0x1ed5, + 0x1ed7, + 0x1ee0, + 0x01a0, + 0x1ed9, + 0x1edd, + 0x1edf, + 0x1ecb, + 0x1ef0, + 0x1ee8, + 0x1eea, + 0x1eec, + 0x01a1, + 0x1edb, + 0x01af, + 0x00c0, + 0x00c1, + 0x00c2, + 0x00c3, + 0x1ea2, + 0x0102, + 0x1eb3, + 0x1eb5, + 0x00c8, + 0x00c9, + 0x00ca, + 0x1eba, + 0x00cc, + 0x00cd, + 0x0128, + 0x1ef3, + 0x0110, + 0x1ee9, + 0x00d2, + 0x00d3, + 0x00d4, + 0x1ea1, + 0x1ef7, + 0x1eeb, + 0x1eed, + 0x00d9, + 0x00da, + 0x1ef9, + 0x1ef5, + 0x00dd, + 0x1ee1, + 0x01b0, + 0x00e0, + 0x00e1, + 0x00e2, + 0x00e3, + 0x1ea3, + 0x0103, + 0x1eef, + 0x1eab, + 0x00e8, + 0x00e9, + 0x00ea, + 0x1ebb, + 0x00ec, + 0x00ed, + 0x0129, + 0x1ec9, + 0x0111, + 0x1ef1, + 0x00f2, + 0x00f3, + 0x00f4, + 0x00f5, + 0x1ecf, + 0x1ecd, + 0x1ee5, + 0x00f9, + 0x00fa, + 0x0169, + 0x1ee7, + 0x00fd, + 0x1ee3, + 0x1eee, +); + +my @to_utf8 = ( + "\x00", + "\x01", + "\xe1\xba\xb2", + "\x03", + "\x04", + "\xe1\xba\xb4", + "\xe1\xba\xaa", + "\x07", + "\x08", + "\x09", + "\x0a", + "\x0b", + "\x0c", + "\x0d", + "\x0e", + "\x0f", + "\x10", + "\x11", + "\x12", + "\x13", + "\xe1\xbb\xb6", + "\x15", + "\x16", + "\x17", + "\x18", + "\xe1\xbb\xb8", + "\x1a", + "\x1b", + "\x1c", + "\x1d", + "\xe1\xbb\xb4", + "\x1f", + "\x20", + "\x21", + "\x22", + "\x23", + "\x24", + "\x25", + "\x26", + "\x27", + "\x28", + "\x29", + "\x2a", + "\x2b", + "\x2c", + "\x2d", + "\x2e", + "\x2f", + "\x30", + "\x31", + "\x32", + "\x33", + "\x34", + "\x35", + "\x36", + "\x37", + "\x38", + "\x39", + "\x3a", + "\x3b", + "\x3c", + "\x3d", + "\x3e", + "\x3f", + "\x40", + "\x41", + "\x42", + "\x43", + "\x44", + "\x45", + "\x46", + "\x47", + "\x48", + "\x49", + "\x4a", + "\x4b", + "\x4c", + "\x4d", + "\x4e", + "\x4f", + "\x50", + "\x51", + "\x52", + "\x53", + "\x54", + "\x55", + "\x56", + "\x57", + "\x58", + "\x59", + "\x5a", + "\x5b", + "\x5c", + "\x5d", + "\x5e", + "\x5f", + "\x60", + "\x61", + "\x62", + "\x63", + "\x64", + "\x65", + "\x66", + "\x67", + "\x68", + "\x69", + "\x6a", + "\x6b", + "\x6c", + "\x6d", + "\x6e", + "\x6f", + "\x70", + "\x71", + "\x72", + "\x73", + "\x74", + "\x75", + "\x76", + "\x77", + "\x78", + "\x79", + "\x7a", + "\x7b", + "\x7c", + "\x7d", + "\x7e", + "\x7f", + "\xe1\xba\xa0", + "\xe1\xba\xae", + "\xe1\xba\xb0", + "\xe1\xba\xb6", + "\xe1\xba\xa4", + "\xe1\xba\xa6", + "\xe1\xba\xa8", + "\xe1\xba\xac", + "\xe1\xba\xbc", + "\xe1\xba\xb8", + "\xe1\xba\xbe", + "\xe1\xbb\x80", + "\xe1\xbb\x82", + "\xe1\xbb\x84", + "\xe1\xbb\x86", + "\xe1\xbb\x90", + "\xe1\xbb\x92", + "\xe1\xbb\x94", + "\xe1\xbb\x96", + "\xe1\xbb\x98", + "\xe1\xbb\xa2", + "\xe1\xbb\x9a", + "\xe1\xbb\x9c", + "\xe1\xbb\x9e", + "\xe1\xbb\x8a", + "\xe1\xbb\x8e", + "\xe1\xbb\x8c", + "\xe1\xbb\x88", + "\xe1\xbb\xa6", + "\xc5\xa8", + "\xe1\xbb\xa4", + "\xe1\xbb\xb2", + "\xc3\x95", + "\xe1\xba\xaf", + "\xe1\xba\xb1", + "\xe1\xba\xb7", + "\xe1\xba\xa5", + "\xe1\xba\xa7", + "\xe1\xba\xa9", + "\xe1\xba\xad", + "\xe1\xba\xbd", + "\xe1\xba\xb9", + "\xe1\xba\xbf", + "\xe1\xbb\x81", + "\xe1\xbb\x83", + "\xe1\xbb\x85", + "\xe1\xbb\x87", + "\xe1\xbb\x91", + "\xe1\xbb\x93", + "\xe1\xbb\x95", + "\xe1\xbb\x97", + "\xe1\xbb\xa0", + "\xc6\xa0", + "\xe1\xbb\x99", + "\xe1\xbb\x9d", + "\xe1\xbb\x9f", + "\xe1\xbb\x8b", + "\xe1\xbb\xb0", + "\xe1\xbb\xa8", + "\xe1\xbb\xaa", + "\xe1\xbb\xac", + "\xc6\xa1", + "\xe1\xbb\x9b", + "\xc6\xaf", + "\xc3\x80", + "\xc3\x81", + "\xc3\x82", + "\xc3\x83", + "\xe1\xba\xa2", + "\xc4\x82", + "\xe1\xba\xb3", + "\xe1\xba\xb5", + "\xc3\x88", + "\xc3\x89", + "\xc3\x8a", + "\xe1\xba\xba", + "\xc3\x8c", + "\xc3\x8d", + "\xc4\xa8", + "\xe1\xbb\xb3", + "\xc4\x90", + "\xe1\xbb\xa9", + "\xc3\x92", + "\xc3\x93", + "\xc3\x94", + "\xe1\xba\xa1", + "\xe1\xbb\xb7", + "\xe1\xbb\xab", + "\xe1\xbb\xad", + "\xc3\x99", + "\xc3\x9a", + "\xe1\xbb\xb9", + "\xe1\xbb\xb5", + "\xc3\x9d", + "\xe1\xbb\xa1", + "\xc6\xb0", + "\xc3\xa0", + "\xc3\xa1", + "\xc3\xa2", + "\xc3\xa3", + "\xe1\xba\xa3", + "\xc4\x83", + "\xe1\xbb\xaf", + "\xe1\xba\xab", + "\xc3\xa8", + "\xc3\xa9", + "\xc3\xaa", + "\xe1\xba\xbb", + "\xc3\xac", + "\xc3\xad", + "\xc4\xa9", + "\xe1\xbb\x89", + "\xc4\x91", + "\xe1\xbb\xb1", + "\xc3\xb2", + "\xc3\xb3", + "\xc3\xb4", + "\xc3\xb5", + "\xe1\xbb\x8f", + "\xe1\xbb\x8d", + "\xe1\xbb\xa5", + "\xc3\xb9", + "\xc3\xba", + "\xc5\xa9", + "\xe1\xbb\xa7", + "\xc3\xbd", + "\xe1\xbb\xa3", + "\xe1\xbb\xae", +); + +my %from_ucs4 = ( + 0x00000000 => "\x00", + 0x00000001 => "\x01", + 0x00000003 => "\x03", + 0x00000004 => "\x04", + 0x00000007 => "\x07", + 0x00000008 => "\x08", + 0x00000009 => "\x09", + 0x0000000a => "\x0a", + 0x0000000b => "\x0b", + 0x0000000c => "\x0c", + 0x0000000d => "\x0d", + 0x0000000e => "\x0e", + 0x0000000f => "\x0f", + 0x00000010 => "\x10", + 0x00000011 => "\x11", + 0x00000012 => "\x12", + 0x00000013 => "\x13", + 0x00000015 => "\x15", + 0x00000016 => "\x16", + 0x00000017 => "\x17", + 0x00000018 => "\x18", + 0x0000001a => "\x1a", + 0x0000001b => "\x1b", + 0x0000001c => "\x1c", + 0x0000001d => "\x1d", + 0x0000001f => "\x1f", + 0x00000020 => "\x20", + 0x00000021 => "\x21", + 0x00000022 => "\x22", + 0x00000023 => "\x23", + 0x00000024 => "\x24", + 0x00000025 => "\x25", + 0x00000026 => "\x26", + 0x00000027 => "\x27", + 0x00000028 => "\x28", + 0x00000029 => "\x29", + 0x0000002a => "\x2a", + 0x0000002b => "\x2b", + 0x0000002c => "\x2c", + 0x0000002d => "\x2d", + 0x0000002e => "\x2e", + 0x0000002f => "\x2f", + 0x00000030 => "\x30", + 0x00000031 => "\x31", + 0x00000032 => "\x32", + 0x00000033 => "\x33", + 0x00000034 => "\x34", + 0x00000035 => "\x35", + 0x00000036 => "\x36", + 0x00000037 => "\x37", + 0x00000038 => "\x38", + 0x00000039 => "\x39", + 0x0000003a => "\x3a", + 0x0000003b => "\x3b", + 0x0000003c => "\x3c", + 0x0000003d => "\x3d", + 0x0000003e => "\x3e", + 0x0000003f => "\x3f", + 0x00000040 => "\x40", + 0x00000041 => "\x41", + 0x00000042 => "\x42", + 0x00000043 => "\x43", + 0x00000044 => "\x44", + 0x00000045 => "\x45", + 0x00000046 => "\x46", + 0x00000047 => "\x47", + 0x00000048 => "\x48", + 0x00000049 => "\x49", + 0x0000004a => "\x4a", + 0x0000004b => "\x4b", + 0x0000004c => "\x4c", + 0x0000004d => "\x4d", + 0x0000004e => "\x4e", + 0x0000004f => "\x4f", + 0x00000050 => "\x50", + 0x00000051 => "\x51", + 0x00000052 => "\x52", + 0x00000053 => "\x53", + 0x00000054 => "\x54", + 0x00000055 => "\x55", + 0x00000056 => "\x56", + 0x00000057 => "\x57", + 0x00000058 => "\x58", + 0x00000059 => "\x59", + 0x0000005a => "\x5a", + 0x0000005b => "\x5b", + 0x0000005c => "\x5c", + 0x0000005d => "\x5d", + 0x0000005e => "\x5e", + 0x0000005f => "\x5f", + 0x00000060 => "\x60", + 0x00000061 => "\x61", + 0x00000062 => "\x62", + 0x00000063 => "\x63", + 0x00000064 => "\x64", + 0x00000065 => "\x65", + 0x00000066 => "\x66", + 0x00000067 => "\x67", + 0x00000068 => "\x68", + 0x00000069 => "\x69", + 0x0000006a => "\x6a", + 0x0000006b => "\x6b", + 0x0000006c => "\x6c", + 0x0000006d => "\x6d", + 0x0000006e => "\x6e", + 0x0000006f => "\x6f", + 0x00000070 => "\x70", + 0x00000071 => "\x71", + 0x00000072 => "\x72", + 0x00000073 => "\x73", + 0x00000074 => "\x74", + 0x00000075 => "\x75", + 0x00000076 => "\x76", + 0x00000077 => "\x77", + 0x00000078 => "\x78", + 0x00000079 => "\x79", + 0x0000007a => "\x7a", + 0x0000007b => "\x7b", + 0x0000007c => "\x7c", + 0x0000007d => "\x7d", + 0x0000007e => "\x7e", + 0x0000007f => "\x7f", + 0x000000c0 => "\xc0", + 0x000000c1 => "\xc1", + 0x000000c2 => "\xc2", + 0x000000c3 => "\xc3", + 0x000000c8 => "\xc8", + 0x000000c9 => "\xc9", + 0x000000ca => "\xca", + 0x000000cc => "\xcc", + 0x000000cd => "\xcd", + 0x000000d2 => "\xd2", + 0x000000d3 => "\xd3", + 0x000000d4 => "\xd4", + 0x000000d5 => "\xa0", + 0x000000d9 => "\xd9", + 0x000000da => "\xda", + 0x000000dd => "\xdd", + 0x000000e0 => "\xe0", + 0x000000e1 => "\xe1", + 0x000000e2 => "\xe2", + 0x000000e3 => "\xe3", + 0x000000e8 => "\xe8", + 0x000000e9 => "\xe9", + 0x000000ea => "\xea", + 0x000000ec => "\xec", + 0x000000ed => "\xed", + 0x000000f2 => "\xf2", + 0x000000f3 => "\xf3", + 0x000000f4 => "\xf4", + 0x000000f5 => "\xf5", + 0x000000f9 => "\xf9", + 0x000000fa => "\xfa", + 0x000000fd => "\xfd", + 0x00000102 => "\xc5", + 0x00000103 => "\xe5", + 0x00000110 => "\xd0", + 0x00000111 => "\xf0", + 0x00000128 => "\xce", + 0x00000129 => "\xee", + 0x00000168 => "\x9d", + 0x00000169 => "\xfb", + 0x000001a0 => "\xb4", + 0x000001a1 => "\xbd", + 0x000001af => "\xbf", + 0x000001b0 => "\xdf", + 0x00001ea0 => "\x80", + 0x00001ea1 => "\xd5", + 0x00001ea2 => "\xc4", + 0x00001ea3 => "\xe4", + 0x00001ea4 => "\x84", + 0x00001ea5 => "\xa4", + 0x00001ea6 => "\x85", + 0x00001ea7 => "\xa5", + 0x00001ea8 => "\x86", + 0x00001ea9 => "\xa6", + 0x00001eaa => "\x06", + 0x00001eab => "\xe7", + 0x00001eac => "\x87", + 0x00001ead => "\xa7", + 0x00001eae => "\x81", + 0x00001eaf => "\xa1", + 0x00001eb0 => "\x82", + 0x00001eb1 => "\xa2", + 0x00001eb2 => "\x02", + 0x00001eb3 => "\xc6", + 0x00001eb4 => "\x05", + 0x00001eb5 => "\xc7", + 0x00001eb6 => "\x83", + 0x00001eb7 => "\xa3", + 0x00001eb8 => "\x89", + 0x00001eb9 => "\xa9", + 0x00001eba => "\xcb", + 0x00001ebb => "\xeb", + 0x00001ebc => "\x88", + 0x00001ebd => "\xa8", + 0x00001ebe => "\x8a", + 0x00001ebf => "\xaa", + 0x00001ec0 => "\x8b", + 0x00001ec1 => "\xab", + 0x00001ec2 => "\x8c", + 0x00001ec3 => "\xac", + 0x00001ec4 => "\x8d", + 0x00001ec5 => "\xad", + 0x00001ec6 => "\x8e", + 0x00001ec7 => "\xae", + 0x00001ec8 => "\x9b", + 0x00001ec9 => "\xef", + 0x00001eca => "\x98", + 0x00001ecb => "\xb8", + 0x00001ecc => "\x9a", + 0x00001ecd => "\xf7", + 0x00001ece => "\x99", + 0x00001ecf => "\xf6", + 0x00001ed0 => "\x8f", + 0x00001ed1 => "\xaf", + 0x00001ed2 => "\x90", + 0x00001ed3 => "\xb0", + 0x00001ed4 => "\x91", + 0x00001ed5 => "\xb1", + 0x00001ed6 => "\x92", + 0x00001ed7 => "\xb2", + 0x00001ed8 => "\x93", + 0x00001ed9 => "\xb5", + 0x00001eda => "\x95", + 0x00001edb => "\xbe", + 0x00001edc => "\x96", + 0x00001edd => "\xb6", + 0x00001ede => "\x97", + 0x00001edf => "\xb7", + 0x00001ee0 => "\xb3", + 0x00001ee1 => "\xde", + 0x00001ee2 => "\x94", + 0x00001ee3 => "\xfe", + 0x00001ee4 => "\x9e", + 0x00001ee5 => "\xf8", + 0x00001ee6 => "\x9c", + 0x00001ee7 => "\xfc", + 0x00001ee8 => "\xba", + 0x00001ee9 => "\xd1", + 0x00001eea => "\xbb", + 0x00001eeb => "\xd7", + 0x00001eec => "\xbc", + 0x00001eed => "\xd8", + 0x00001eee => "\xff", + 0x00001eef => "\xe6", + 0x00001ef0 => "\xb9", + 0x00001ef1 => "\xf1", + 0x00001ef2 => "\x9f", + 0x00001ef3 => "\xcf", + 0x00001ef4 => "\x1e", + 0x00001ef5 => "\xdc", + 0x00001ef6 => "\x14", + 0x00001ef7 => "\xd6", + 0x00001ef8 => "\x19", + 0x00001ef9 => "\xdb", +); + +sub _recode +{ + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = join '', + map $from_ucs4{$_} + || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"), + @{$_[1]}; + } elsif ($_[0]->{_to} eq 'UTF-8',) { + $_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1]; + } else { + $_[1] = [ map + $to_ucs4[$_], + unpack 'C*', $_[1] + ]; + } + + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::VISCII - Conversion routines for VISCII + +=head1 SYNOPSIS + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module is generated and contains the conversion tables and +routines for VISCII. +=head1 CHARACTER TABLE + +The following table is sorted in the same order as the original charmap. +All character codes are in hexadecimal. Please read 'ISO-10646' as +'ISO-10646-UCS4'. + + Local | ISO-10646 | Description +-------+-----------+------------------------------------------------- + 00 | 00000000 | NULL (NUL) + 01 | 00000001 | START OF HEADING (SOH) + 02 | 00001EB2 | LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE + 03 | 00000003 | END OF TEXT (ETX) + 04 | 00000004 | END OF TRANSMISSION (EOT) + 05 | 00001EB4 | LATIN CAPITAL LETTER A WITH BREVE AND TILDE + 06 | 00001EAA | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE + 07 | 00000007 | BELL (BEL) + 08 | 00000008 | BACKSPACE (BS) + 09 | 00000009 | CHARACTER TABULATION (HT) + 0A | 0000000A | LINE FEED (LF) + 0B | 0000000B | LINE TABULATION (VT) + 0C | 0000000C | FORM FEED (FF) + 0D | 0000000D | CARRIAGE RETURN (CR) + 0E | 0000000E | SHIFT OUT (SO) + 0F | 0000000F | SHIFT IN (SI) + 10 | 00000010 | DATALINK ESCAPE (DLE) + 11 | 00000011 | DEVICE CONTROL ONE (DC1) + 12 | 00000012 | DEVICE CONTROL TWO (DC2) + 13 | 00000013 | DEVICE CONTROL THREE (DC3) + 14 | 00001EF6 | LATIN CAPITAL LETTER Y WITH HOOK ABOVE + 15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK) + 16 | 00000016 | SYNCHRONOUS IDLE (SYN) + 17 | 00000017 | END OF TRANSMISSION BLOCK (ETB) + 18 | 00000018 | CANCEL (CAN) + 19 | 00001EF8 | LATIN CAPITAL LETTER Y WITH TILDE + 1A | 0000001A | SUBSTITUTE (SUB) + 1B | 0000001B | ESCAPE (ESC) + 1C | 0000001C | FILE SEPARATOR (IS4) + 1D | 0000001D | GROUP SEPARATOR (IS3) + 1E | 00001EF4 | LATIN CAPITAL LETTER Y WITH DOT BELOW + 1F | 0000001F | UNIT SEPARATOR (IS1) + 20 | 00000020 | SPACE + 21 | 00000021 | EXCLAMATION MARK + 22 | 00000022 | QUOTATION MARK + 23 | 00000023 | NUMBER SIGN + 24 | 00000024 | DOLLAR SIGN + 25 | 00000025 | PERCENT SIGN + 26 | 00000026 | AMPERSAND + 27 | 00000027 | APOSTROPHE + 28 | 00000028 | LEFT PARENTHESIS + 29 | 00000029 | RIGHT PARENTHESIS + 2A | 0000002A | ASTERISK + 2B | 0000002B | PLUS SIGN + 2C | 0000002C | COMMA + 2D | 0000002D | HYPHEN-MINUS + 2E | 0000002E | FULL STOP + 2F | 0000002F | SOLIDUS + 30 | 00000030 | DIGIT ZERO + 31 | 00000031 | DIGIT ONE + 32 | 00000032 | DIGIT TWO + 33 | 00000033 | DIGIT THREE + 34 | 00000034 | DIGIT FOUR + 35 | 00000035 | DIGIT FIVE + 36 | 00000036 | DIGIT SIX + 37 | 00000037 | DIGIT SEVEN + 38 | 00000038 | DIGIT EIGHT + 39 | 00000039 | DIGIT NINE + 3A | 0000003A | COLON + 3B | 0000003B | SEMICOLON + 3C | 0000003C | LESS-THAN SIGN + 3D | 0000003D | EQUALS SIGN + 3E | 0000003E | GREATER-THAN SIGN + 3F | 0000003F | QUESTION MARK + 40 | 00000040 | COMMERCIAL AT + 41 | 00000041 | LATIN CAPITAL LETTER A + 42 | 00000042 | LATIN CAPITAL LETTER B + 43 | 00000043 | LATIN CAPITAL LETTER C + 44 | 00000044 | LATIN CAPITAL LETTER D + 45 | 00000045 | LATIN CAPITAL LETTER E + 46 | 00000046 | LATIN CAPITAL LETTER F + 47 | 00000047 | LATIN CAPITAL LETTER G + 48 | 00000048 | LATIN CAPITAL LETTER H + 49 | 00000049 | LATIN CAPITAL LETTER I + 4A | 0000004A | LATIN CAPITAL LETTER J + 4B | 0000004B | LATIN CAPITAL LETTER K + 4C | 0000004C | LATIN CAPITAL LETTER L + 4D | 0000004D | LATIN CAPITAL LETTER M + 4E | 0000004E | LATIN CAPITAL LETTER N + 4F | 0000004F | LATIN CAPITAL LETTER O + 50 | 00000050 | LATIN CAPITAL LETTER P + 51 | 00000051 | LATIN CAPITAL LETTER Q + 52 | 00000052 | LATIN CAPITAL LETTER R + 53 | 00000053 | LATIN CAPITAL LETTER S + 54 | 00000054 | LATIN CAPITAL LETTER T + 55 | 00000055 | LATIN CAPITAL LETTER U + 56 | 00000056 | LATIN CAPITAL LETTER V + 57 | 00000057 | LATIN CAPITAL LETTER W + 58 | 00000058 | LATIN CAPITAL LETTER X + 59 | 00000059 | LATIN CAPITAL LETTER Y + 5A | 0000005A | LATIN CAPITAL LETTER Z + 5B | 0000005B | LEFT SQUARE BRACKET + 5C | 0000005C | REVERSE SOLIDUS + 5D | 0000005D | RIGHT SQUARE BRACKET + 5E | 0000005E | CIRCUMFLEX ACCENT + 5F | 0000005F | LOW LINE + 60 | 00000060 | GRAVE ACCENT + 61 | 00000061 | LATIN SMALL LETTER A + 62 | 00000062 | LATIN SMALL LETTER B + 63 | 00000063 | LATIN SMALL LETTER C + 64 | 00000064 | LATIN SMALL LETTER D + 65 | 00000065 | LATIN SMALL LETTER E + 66 | 00000066 | LATIN SMALL LETTER F + 67 | 00000067 | LATIN SMALL LETTER G + 68 | 00000068 | LATIN SMALL LETTER H + 69 | 00000069 | LATIN SMALL LETTER I + 6A | 0000006A | LATIN SMALL LETTER J + 6B | 0000006B | LATIN SMALL LETTER K + 6C | 0000006C | LATIN SMALL LETTER L + 6D | 0000006D | LATIN SMALL LETTER M + 6E | 0000006E | LATIN SMALL LETTER N + 6F | 0000006F | LATIN SMALL LETTER O + 70 | 00000070 | LATIN SMALL LETTER P + 71 | 00000071 | LATIN SMALL LETTER Q + 72 | 00000072 | LATIN SMALL LETTER R + 73 | 00000073 | LATIN SMALL LETTER S + 74 | 00000074 | LATIN SMALL LETTER T + 75 | 00000075 | LATIN SMALL LETTER U + 76 | 00000076 | LATIN SMALL LETTER V + 77 | 00000077 | LATIN SMALL LETTER W + 78 | 00000078 | LATIN SMALL LETTER X + 79 | 00000079 | LATIN SMALL LETTER Y + 7A | 0000007A | LATIN SMALL LETTER Z + 7B | 0000007B | LEFT CURLY BRACKET + 7C | 0000007C | VERTICAL LINE + 7D | 0000007D | RIGHT CURLY BRACKET + 7E | 0000007E | TILDE + 7F | 0000007F | DELETE (DEL) + 80 | 00001EA0 | LATIN CAPITAL LETTER A WITH DOT BELOW + 81 | 00001EAE | LATIN CAPITAL LETTER A WITH BREVE AND ACUTE + 82 | 00001EB0 | LATIN CAPITAL LETTER A WITH BREVE AND GRAVE + 83 | 00001EB6 | LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW + 84 | 00001EA4 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE + 85 | 00001EA6 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE + 86 | 00001EA8 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE + 87 | 00001EAC | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW + 88 | 00001EBC | LATIN CAPITAL LETTER E WITH TILDE + 89 | 00001EB8 | LATIN CAPITAL LETTER E WITH DOT BELOW + 8A | 00001EBE | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE + 8B | 00001EC0 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE + 8C | 00001EC2 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE + 8D | 00001EC4 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE + 8E | 00001EC6 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW + 8F | 00001ED0 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE + 90 | 00001ED2 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE + 91 | 00001ED4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE + 92 | 00001ED6 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE + 93 | 00001ED8 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW + 94 | 00001EE2 | LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW + 95 | 00001EDA | LATIN CAPITAL LETTER O WITH HORN AND ACUTE + 96 | 00001EDC | LATIN CAPITAL LETTER O WITH HORN AND GRAVE + 97 | 00001EDE | LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE + 98 | 00001ECA | LATIN CAPITAL LETTER I WITH DOT BELOW + 99 | 00001ECE | LATIN CAPITAL LETTER O WITH HOOK ABOVE + 9A | 00001ECC | LATIN CAPITAL LETTER O WITH DOT BELOW + 9B | 00001EC8 | LATIN CAPITAL LETTER I WITH HOOK ABOVE + 9C | 00001EE6 | LATIN CAPITAL LETTER U WITH HOOK ABOVE + 9D | 00000168 | LATIN CAPITAL LETTER U WITH TILDE + 9E | 00001EE4 | LATIN CAPITAL LETTER U WITH DOT BELOW + 9F | 00001EF2 | LATIN CAPITAL LETTER Y WITH GRAVE + A0 | 000000D5 | LATIN CAPITAL LETTER O WITH TILDE + A1 | 00001EAF | LATIN SMALL LETTER A WITH BREVE AND ACUTE + A2 | 00001EB1 | LATIN SMALL LETTER A WITH BREVE AND GRAVE + A3 | 00001EB7 | LATIN SMALL LETTER A WITH BREVE AND DOT BELOW + A4 | 00001EA5 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE + A5 | 00001EA7 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE + A6 | 00001EA9 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE + A7 | 00001EAD | LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW + A8 | 00001EBD | LATIN SMALL LETTER E WITH TILDE + A9 | 00001EB9 | LATIN SMALL LETTER E WITH DOT BELOW + AA | 00001EBF | LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE + AB | 00001EC1 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE + AC | 00001EC3 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE + AD | 00001EC5 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE + AE | 00001EC7 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW + AF | 00001ED1 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE + B0 | 00001ED3 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE + B1 | 00001ED5 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE + B2 | 00001ED7 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE + B3 | 00001EE0 | LATIN CAPITAL LETTER O WITH HORN AND TILDE + B4 | 000001A0 | LATIN CAPITAL LETTER O WITH HORN + B5 | 00001ED9 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW + B6 | 00001EDD | LATIN SMALL LETTER O WITH HORN AND GRAVE + B7 | 00001EDF | LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE + B8 | 00001ECB | LATIN SMALL LETTER I WITH DOT BELOW + B9 | 00001EF0 | LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW + BA | 00001EE8 | LATIN CAPITAL LETTER U WITH HORN AND ACUTE + BB | 00001EEA | LATIN CAPITAL LETTER U WITH HORN AND GRAVE + BC | 00001EEC | LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE + BD | 000001A1 | LATIN SMALL LETTER O WITH HORN + BE | 00001EDB | LATIN SMALL LETTER O WITH HORN AND ACUTE + BF | 000001AF | LATIN CAPITAL LETTER U WITH HORN + C0 | 000000C0 | LATIN CAPITAL LETTER A WITH GRAVE + C1 | 000000C1 | LATIN CAPITAL LETTER A WITH ACUTE + C2 | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX + C3 | 000000C3 | LATIN CAPITAL LETTER A WITH TILDE + C4 | 00001EA2 | LATIN CAPITAL LETTER A WITH HOOK ABOVE + C5 | 00000102 | LATIN CAPITAL LETTER A WITH BREVE + C6 | 00001EB3 | LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE + C7 | 00001EB5 | LATIN SMALL LETTER A WITH BREVE AND TILDE + C8 | 000000C8 | LATIN CAPITAL LETTER E WITH GRAVE + C9 | 000000C9 | LATIN CAPITAL LETTER E WITH ACUTE + CA | 000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX + CB | 00001EBA | LATIN CAPITAL LETTER E WITH HOOK ABOVE + CC | 000000CC | LATIN CAPITAL LETTER I WITH GRAVE + CD | 000000CD | LATIN CAPITAL LETTER I WITH ACUTE + CE | 00000128 | LATIN CAPITAL LETTER I WITH TILDE + CF | 00001EF3 | LATIN SMALL LETTER Y WITH GRAVE + D0 | 00000110 | LATIN CAPITAL LETTER D WITH STROKE + D1 | 00001EE9 | LATIN SMALL LETTER U WITH HORN AND ACUTE + D2 | 000000D2 | LATIN CAPITAL LETTER O WITH GRAVE + D3 | 000000D3 | LATIN CAPITAL LETTER O WITH ACUTE + D4 | 000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX + D5 | 00001EA1 | LATIN SMALL LETTER A WITH DOT BELOW + D6 | 00001EF7 | LATIN SMALL LETTER Y WITH HOOK ABOVE + D7 | 00001EEB | LATIN SMALL LETTER U WITH HORN AND GRAVE + D8 | 00001EED | LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE + D9 | 000000D9 | LATIN CAPITAL LETTER U WITH GRAVE + DA | 000000DA | LATIN CAPITAL LETTER U WITH ACUTE + DB | 00001EF9 | LATIN SMALL LETTER Y WITH TILDE + DC | 00001EF5 | LATIN SMALL LETTER Y WITH DOT BELOW + DD | 000000DD | LATIN CAPITAL LETTER Y WITH ACUTE + DE | 00001EE1 | LATIN SMALL LETTER O WITH HORN AND TILDE + DF | 000001B0 | LATIN SMALL LETTER U WITH HORN + E0 | 000000E0 | LATIN SMALL LETTER A WITH GRAVE + E1 | 000000E1 | LATIN SMALL LETTER A WITH ACUTE + E2 | 000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX + E3 | 000000E3 | LATIN SMALL LETTER A WITH TILDE + E4 | 00001EA3 | LATIN SMALL LETTER A WITH HOOK ABOVE + E5 | 00000103 | LATIN SMALL LETTER A WITH BREVE + E6 | 00001EEF | LATIN SMALL LETTER U WITH HORN AND TILDE + E7 | 00001EAB | LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE + E8 | 000000E8 | LATIN SMALL LETTER E WITH GRAVE + E9 | 000000E9 | LATIN SMALL LETTER E WITH ACUTE + EA | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX + EB | 00001EBB | LATIN SMALL LETTER E WITH HOOK ABOVE + EC | 000000EC | LATIN SMALL LETTER I WITH GRAVE + ED | 000000ED | LATIN SMALL LETTER I WITH ACUTE + EE | 00000129 | LATIN SMALL LETTER I WITH TILDE + EF | 00001EC9 | LATIN SMALL LETTER I WITH HOOK ABOVE + F0 | 00000111 | LATIN SMALL LETTER D WITH STROKE + F1 | 00001EF1 | LATIN SMALL LETTER U WITH HORN AND DOT BELOW + F2 | 000000F2 | LATIN SMALL LETTER O WITH GRAVE + F3 | 000000F3 | LATIN SMALL LETTER O WITH ACUTE + F4 | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX + F5 | 000000F5 | LATIN SMALL LETTER O WITH TILDE + F6 | 00001ECF | LATIN SMALL LETTER O WITH HOOK ABOVE + F7 | 00001ECD | LATIN SMALL LETTER O WITH DOT BELOW + F8 | 00001EE5 | LATIN SMALL LETTER U WITH DOT BELOW + F9 | 000000F9 | LATIN SMALL LETTER U WITH GRAVE + FA | 000000FA | LATIN SMALL LETTER U WITH ACUTE + FB | 00000169 | LATIN SMALL LETTER U WITH TILDE + FC | 00001EE7 | LATIN SMALL LETTER U WITH HOOK ABOVE + FD | 000000FD | LATIN SMALL LETTER Y WITH ACUTE + FE | 00001EE3 | LATIN SMALL LETTER O WITH HORN AND DOT BELOW + FF | 00001EEE | LATIN CAPITAL LETTER U WITH HORN AND TILDE + + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::RecodeData(3), Locale::Recode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/RecodeData/_Encode.pm b/lib/Locale/RecodeData/_Encode.pm new file mode 100644 index 0000000..0b73bbf --- /dev/null +++ b/lib/Locale/RecodeData/_Encode.pm @@ -0,0 +1,95 @@ +#! /bin/false +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Interface to Encode. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::RecodeData::_Encode; + +use strict; +use integer; + +use Encode; + +require Locale::RecodeData; +use base qw (Locale::RecodeData); + +sub _recode +{ + use bytes; + + my $retval; + + if ($_[0]->{_from} eq 'INTERNAL') { + $_[1] = pack "N*", @{$_[1]}; + $retval = Encode::from_to ($_[1], 'UTF-32BE', $_[0]->{_to}); + } elsif ($_[0]->{_to} eq 'INTERNAL') { + $retval = Encode::from_to ($_[1], $_[0]->{_from}, 'UTF-32BE'); + return unless defined $retval; + $_[1] = [ unpack "N*", $_[1] ]; + } else { + $retval = Encode::from_to ($_[1], $_[0]->{_from}, $_[0]->{_to}); + } + + return unless defined $retval; + return 1; +} + +1; + +__END__ + +=head1 NAME + +Locale::RecodeData::_Encode - Internal wrapper around Encode + +=head1 SYNOPSIS + +use Locale::RecodeData::_Encode; + +This module is internal to libintl. Do not use directly! + +=head1 DESCRIPTION + +This module converts text with the help of Encode(3). It is +tried first for conversions if libintl-perl detects the presence +of Encode. + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::Recode(3), Encode(3), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/TextDomain.pm b/lib/Locale/TextDomain.pm new file mode 100755 index 0000000..e41eaae --- /dev/null +++ b/lib/Locale/TextDomain.pm @@ -0,0 +1,1176 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# High-level interface to Perl i18n. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package __TiedTextDomain; + +use strict; + +sub TIEHASH +{ + my ($class, $function) = @_; + bless { + __function => $function, + }, $class; +} + +sub FETCH +{ + my ($self, $msg) = @_; + + &{$self->{__function}} ($msg); +} + +sub FIRSTKEY +{ + my $self = shift; + my $reset_iterator = keys %$self; + return scalar each %$self; +} + +sub NEXTKEY +{ + my $self = shift; + return scalar each %$self; +} + +sub CLEAR {} +sub STORE {} +sub DELETE {} + +1; + +package Locale::TextDomain; + +use strict; + +use Locale::Messages qw (textdomain bindtextdomain dgettext dngettext dpgettext dnpgettext); +use Cwd qw (abs_path); + +use vars qw ($VERSION); + +$VERSION = '1.29'; + +require Exporter; + +use vars qw (@ISA @EXPORT %__ $__); + +@ISA = ('Exporter'); +@EXPORT = qw (__ __x __n __nx __xn __p __px __np __npx $__ %__ + N__ N__n N__p N__np); + +my %textdomains = (); +my %bound_dirs = (); +my @default_dirs = (); + +sub __ ($); + +sub __find_domain ($); +sub __expand ($%); +sub __tied_gettext ($$); + +BEGIN { + # Tie the hash to gettext(). + tie %__, '__TiedTextDomain', \&__tied_gettext; + $__ = \%__; + + # Add default search directories, but only if they exist. + for my $dir (qw (/usr/share/locale /usr/local/share/locale)) { + if (-d $dir) { + @default_dirs = ($dir); + last; + } + } +} + +# Class methods. +sub keywords { + join ' ', ( + '--keyword=__', + '--keyword=%__', + '--keyword=$__', + '--keyword=__x', + '--keyword=__n:1,2', + '--keyword=__nx:1,2', + '--keyword=__xn:1,2', + '--keyword=__p:1c,2', + '--keyword=__px:1c,2', + '--keyword=__np:1c,2,3', + '--keyword=__npx:1c,2,3', + '--keyword=N__', + '--keyword=N__n:1,2', + '--keyword=N__p:1c,2', + '--keyword=N__np:1c,2,3', + ); +} + +sub flags { + join ' ', ( + '--flag=__:1:pass-perl-format', + '--flag=%__:1:pass-perl-format', + '--flag=$__:1:pass-perl-format', + '--flag=__x:1:perl-brace-format', + '--flag=__x:1:pass-perl-format', + '--flag=__n:1:pass-perl-format', + '--flag=__n:2:pass-perl-format', + '--flag=__nx:1:perl-brace-format', + '--flag=__nx:1:pass-perl-format', + '--flag=__nx:2:perl-brace-format', + '--flag=__nx:2:pass-perl-format', + '--flag=__xn:1:perl-brace-format', + '--flag=__xn:1:pass-perl-format', + '--flag=__xn:2:perl-brace-format', + '--flag=__xn:2:pass-perl-format', + '--flag=__p:2:pass-perl-format', + '--flag=__px:2:perl-brace-format', + '--flag=__px:2:pass-perl-format', + '--flag=__np:2:pass-perl-format', + '--flag=__np:3:pass-perl-format', + '--flag=__npx:2:perl-brace-format', + '--flag=__npx:2:pass-perl-format', + '--flag=__npx:3:perl-brace-format', + '--flag=__npx:3:pass-perl-format', + '--flag=N__:1:pass-perl-format', + '--flag=N__n:1:pass-perl-format', + '--flag=N__n:2:pass-perl-format', + '--flag=N__p:2:pass-perl-format', + '--flag=N__np:2:pass-perl-format', + '--flag=N__np:3:pass-perl-format', + ); +} + +sub options { + my ($class) = @_; + + join ' ', $class->keywords, $class->flags; +} + +# Normal gettext. +sub __ ($) +{ + my $msgid = shift; + + my $package = caller; + + my $textdomain = $textdomains{$package}; + + __find_domain $textdomain if + defined $textdomain && defined $bound_dirs{$textdomain}; + + return dgettext $textdomain => $msgid; +} + +# Called from tied hash. +sub __tied_gettext ($$) +{ + my ($msgid) = @_; + + my ($package) = caller (1); + + my $textdomain = $textdomains{$package}; + unless (defined $textdomain) { + my ($maybe_package, $filename, $line) = caller (2); + if (exists $textdomains{$maybe_package}) { + warn < $msgid; +} + +# With interpolation. +sub __x ($@) +{ + my ($msgid, %vars) = @_; + + my $package = caller; + + my $textdomain = $textdomains{$package}; + + __find_domain $textdomain if + defined $textdomain && defined $bound_dirs{$textdomain}; + + return __expand ((dgettext $textdomain => $msgid), %vars); +} + +# Plural. +sub __n ($$$) +{ + my ($msgid, $msgid_plural, $count) = @_; + + my $package = caller; + + my $textdomain = $textdomains{$package}; + + __find_domain $textdomain if + defined $textdomain && defined $bound_dirs{$textdomain}; + + return dngettext $textdomain, $msgid, $msgid_plural, $count; +} + +# Plural with interpolation. +sub __nx ($$$@) +{ + my ($msgid, $msgid_plural, $count, %args) = @_; + + my $package = caller; + + my $textdomain = $textdomains{$package}; + + __find_domain $textdomain if + defined $textdomain && defined $bound_dirs{$textdomain}; + + return __expand ((dngettext $textdomain, $msgid, $msgid_plural, $count), + %args); +} + +# Plural with interpolation. +sub __xn ($$$@) +{ + my ($msgid, $msgid_plural, $count, %args) = @_; + + my $package = caller; + + my $textdomain = $textdomains{$package}; + + __find_domain $textdomain if + defined $textdomain && defined $bound_dirs{$textdomain}; + + return __expand ((dngettext $textdomain, $msgid, $msgid_plural, $count), + %args); +} + +# Context. (p is for particular or special) +sub __p ($$) +{ + my $msgctxt = shift; + my $msgid = shift; + + my $package = caller; + + my $textdomain = $textdomains{$package}; + + __find_domain $textdomain if + defined $textdomain && defined $bound_dirs{$textdomain}; + + return dpgettext $textdomain => $msgctxt, $msgid; +} + +# With interpolation. +sub __px ($$@) +{ + my ($msgctxt, $msgid, %vars) = @_; + + my $package = caller; + + my $textdomain = $textdomains{$package}; + + __find_domain $textdomain if + defined $textdomain && defined $bound_dirs{$textdomain}; + + return __expand ((dpgettext $textdomain => $msgctxt, $msgid), %vars); +} + +# Context + Plural. +sub __np ($$$$) +{ + my ($msgctxt, $msgid, $msgid_plural, $count) = @_; + + my $package = caller; + + my $textdomain = $textdomains{$package}; + + __find_domain $textdomain if + defined $textdomain && defined $bound_dirs{$textdomain}; + + return dnpgettext $textdomain, $msgctxt, $msgid, $msgid_plural, $count; +} + +# Plural with interpolation. +sub __npx ($$$$@) +{ + my ($msgctxt, $msgid, $msgid_plural, $count, %args) = @_; + + my $package = caller; + + my $textdomain = $textdomains{$package}; + + __find_domain $textdomain if + defined $textdomain && defined $bound_dirs{$textdomain}; + + return __expand ((dnpgettext $textdomain, $msgctxt, $msgid, $msgid_plural, $count), + %args); +} + +# Dummy functions for string marking. +sub N__($) +{ + return shift; +} + +sub N__n($$$) +{ + return @_; +} + +sub N__p($$) { + return @_; +} + +sub N__np($$$$) { + return @_; +} + +sub import +{ + my ($self, $textdomain, @search_dirs) = @_; + + # Check our caller. + my $package = caller; + return if exists $textdomains{$package}; + + # Was a textdomain specified? + $textdomain = textdomain unless defined $textdomain && length $textdomain; + + # Remember the textdomain of that package. + $textdomains{$package} = $textdomain; + + # Remember that we still have to bind that textdomain to + # a directory. + unless (exists $bound_dirs{$textdomain}) { + unless (@search_dirs) { + @search_dirs = ((map $_ . '/LocaleData', @INC), @default_dirs) + unless @search_dirs; + if (my $share = eval { + require File::ShareDir; + File::ShareDir::dist_dir ($textdomain); + }) { + unshift @search_dirs, + map { "$share/$_" } + qw (locale LocaleData); + } + } + $bound_dirs{$textdomain} = [grep { -d $_ } @search_dirs]; + } + + Locale::TextDomain->export_to_level (1, $package, @EXPORT); + + return; +} + +# Private functions. +sub __find_domain ($) +{ + my $domain = shift; + + my $try_dirs = $bound_dirs{$domain}; + + if (defined $try_dirs) { + my $found_dir = ''; + + TRYDIR: foreach my $dir (map { abs_path $_ } grep { -d $_ } @$try_dirs) { + # Is there a message catalog? We have to search recursively + # for it. Since globbing is reported to be buggy under + # MS-DOS, we roll our own version. + local *DIR; + if (opendir DIR, $dir) { + my @files = map { "$dir/$_/LC_MESSAGES/$domain.mo" } + grep { ! /^\.\.?$/ } readdir DIR; + + foreach my $file (@files) { + if (-f $file || -l $file) { + # If we find a non-readable file on our way, + # we access has been disabled on purpose. + # Therefore no -r check here. + $found_dir = $dir; + last TRYDIR; + } + } + } + } + + # If there was no success, this will fall back to the default search + # directories. + bindtextdomain $domain => $found_dir; + } + + # The search has completed. + undef $bound_dirs{$domain}; + + return 1; +} + +sub __expand ($%) +{ + my ($translation, %args) = @_; + + my $re = join '|', map { quotemeta $_ } keys %args; + $translation =~ s/\{($re)\}/defined $args{$1} ? $args{$1} : "{$1}"/ge; + + return $translation; +} + +1; + +__END__ + +=head1 NAME + +Locale::TextDomain - Perl Interface to Uniforum Message Translation + +=head1 SYNOPSIS + + use Locale::TextDomain ('my-package', @locale_dirs); + + use Locale::TextDomain qw (my-package); + + my $translated = __"Hello World!\n"; + + my $alt = $__{"Hello World!\n"}; + + my $alt2 = $__->{"Hello World!\n"}; + + my @list = (N__"Hello", + N__"World"); + + printf (__n ("one file read", + "%d files read", + $num_files), + $num_files); + + print __nx ("one file read", "{num} files read", $num_files, + num => $num_files); + + my $translated_context = __p ("Verb, to view", "View"); + + printf (__np ("Files read from filesystems", + "one file read", + "%d files read", + $num_files), + $num_files); + + print __npx ("Files read from filesystems", + "one file read", + "{num} files read", + $num_files, + num => $num_files); + + +=head1 DESCRIPTION + +The module Locale::TextDomain(3pm) provides a high-level interface +to Perl message translation. + +=head2 Textdomains + +When you request a translation for a given string, the system used +in libintl-perl follows a standard strategy to find a suitable message +catalog containing the translation: Unless you explicitely define +a name for the message catalog, libintl-perl will assume that your +catalog is called 'messages' (unless you have changed the default +value to something else via Locale::Messages(3pm), method textdomain()). + +You might think that his default strategy leaves room for optimization +and you are right. It would be a lot smarter if multiple software +packages, all with their individual message catalogs, could be installed +on one system, and it should also be possible that third-party +components of your software (like Perl modules) can load their +message catalogs, too, without interfering with yours. + +The solution is clear, you have to assign a unique name to your message +database, and you have to specify that name at run-time. That unique +name is the so-called I of your software package. The name is +actually arbitrary but you should follow these best-practice guidelines +to ensure maximum interoperability: + +=over 8 + +=item File System Safety + +In practice, textdomains get mapped into file names, and you should +therefore make sure that the textdomain you choose is a valid filename +on every system that will run your software. + +=item Case-sensitivity + +Textdomains are always case-sensitive (i. e. 'Package' and 'PACKAGE' +are not the same). However, since the message catalogs will be stored +on file systems, that may or may not distinguish case when looking +up file names, you should avoid potential conflicts here. + +=item Textdomain Should Match CPAN Name + +If your software is listed as a module on CPAN, you should simply +choose the name on CPAN as your textdomain. The textdomain for +libintl-perl is hence 'libintl-perl'. But please replace all +periods ('.') in your package name with an underscore because ... + +=item Internet Domain Names as a Fallback + +... if your software is I a module listed on CPAN, as a last +resort you should use the Java(tm) package scheme, i. e. choose +an internet domain that you are owner of (or ask the owner of an +internet domain) and concatenate your preferred textdomain with the +reversed internet domain. Example: Your company runs the web-site +'www.foobar.org' and is the owner of the domain 'foobar.org'. The +textdomain for your company's software 'barfoos' should hence be +'org.foobar.barfoos'. + +=back + +If your software is likely to be installed in different versions on +the same system, it is probably a good idea to append some version +information to your textdomain. + +Other systems are less strict with the naming scheme for textdomains +but the phenomena known as Perl is actually a plethora of small, +specialized modules and it is probably wisest to postulate some +namespace model in order to avoid chaos. + +=head2 Binding textdomains to directories + +Once the system knows the I of the message that you +want to get translated into the user's language, it still has to +find the correct message catalog. By default, libintl-perl will +look up the string in the translation database found in the +directories F and F +(in that order). + +It is neither guaranteed that these directories exist on the target +machine, nor can you be sure that the installation routine has write +access to these locations. You can therefore instruct libintl-perl +to search other directories prior to the default directories. Specifying +a differnt search directory is called I a textdomain to a +directory. + +Beginning with version 1.20, B extends the default +strategy by a Perl-specific approach. If L is installed, it +will look in the subdirectories named F and F (in that +order) in the directory returned by C +(if L is installed), +and check for a database containing the message for your textdomain there. +This allows you to install your database in the Perl-specific shared directory +using L's C directive or the Dist::Zilla +L. + +If L is not availabe, or if Locale::TextDomain fails to find +the translation files in the L directory, it will next look in +every directory found in the standard include path C<@INC>, and check for a +database containing the message for your textdomain there. Example: If the +path F is in your C<@INC>, you can install your +translation files in F, and they +will be found at run-time. + +=head1 USAGE + +It is crucial to remember that you use Locale::TextDomain(3) as +specified in the section L, that means you have to +B it, not B it. The module behaves quite differently +compared to other modules. + +The most significant difference is the meaning of the list passed +as an argument to the use() function. It actually works like this: + + use Locale::TextDomain (TEXTDOMAIN, DIRECTORY, ...) + +The first argument (the first string passed to use()) is the textdomain +of your package, optionally followed by a list of directories to search +I of the Perl-specific directories (see above: F +appended to a F directory and every path in C<@INC>). + +If you are the author of a package 'barfoos', you will probably put +the line + + use Locale::TextDomain 'barfoos'; + +resp. for non-CPAN modules + + use Locale::TextDomain 'org.foobar.barfoos'; + +in every module of your package that contains translatable strings. If +your module has been installed properly, including the message catalogs, +it will then be able to retrieve these translations at run-time. + +If you have not installed the translation database in a directory +F in the L directory or the standard include +path C<@INC> (or in the system directories F resp. +F), you have to explicitely specify a search +path by giving the names of directories (as strings!) as additional +arguments to use(): + + use Locale::TextDomain qw (barfoos ./dir1 ./dir2); + +Alternatively you can call the function bindtextdomain() with suitable +arguments (see the entry for bindtextdomain() in +L). If you do so, you should pass +C as an additional argument in order to avoid unnecessary +lookups: + + use Locale::TextDomain ('barfoos', undef); + +You see that the arguments given to use() have nothing to do with +what is imported into your namespace, but they are rather arguments +to textdomain(), resp. bindtextdomain(). Does that mean that +B exports nothing into your namespace? Umh, not +exactly ... in fact it imports I functions listed below into +your namespace, and hence you should not define conflicting functions +(and variables) yourself. + +So, why has Locale::TextDomain to be different from other modules? +If you have ever written software in C and prepared it for +internationalization (i18n), you will probably have defined some +preprocessor macros like: + + #define _(String) dgettext ("my-textdomain", String) + #define N_(String) String + +You only have to define that once in C, and the textdomain for your +package is automatically inserted into all gettext functions. In +Perl there is no such mechanism (at least it is not portable, +option -P) and using the gettext functions could become quite +cumbersome without some extra fiddling: + + print dgettext ("my-textdomain", "Hello world!\n"); + +This is no fun. In C it would merely be a + + printf (_("Hello world!\n")); + +Perl has to be more concise and shorter than C ... see the next +section for how you can use B to end up in Perl +with a mere + + print __"Hello World!\n"; + +=head1 EXPORTED FUNCTIONS + +All functions have quite funny names on purpose. In fact the +purpose for that is quite clear: They should be short, operator-like, +and they should not yell for conflicts with existing functions in +I namespace. You will understand it, when you internationalize +your first Perl program or module. Preparing it is more like marking +strings as being translatable than inserting function calls. Here +we go: + +=over 4 + +=item B<__ MSGID> + +B This is a I underscore! + +The basic and most-used function. It is a short-cut for a call +to gettext() resp. dgettext(), and simply returns the translation for +B. If your old code reads like this: + + print "permission denied"; + +You will now write: + + print __"permission denied"; + +That's all, the string will be output in the user's preferred language, +provided that you have installed a translation for it. + +Of course you can also use parentheses: + + print __("permission denied"); + +Or even: + + print (__("permission denied")); + +In my eyes, the first version without parentheses looks best. + +=item B<__x MSGID, ID1 =E VAL1, ID2 =E VAL2, ...> + +One of the nicest features in Perl is its capability to interpolate +variables into strings: + + print "This is the $color $thing.\n"; + +This nice feature might con you into thinking that you could now +write + + print __"This is the $color $thing.\n"; + +Alas, that would be nice, but it is not possible. Remember that the +function __() serves both as an operator for translating strings +I as a mark for translatable strings. If the above string would +get extracted from your Perl code, the un-interpolated form would +end up in the message catalog because when parsing your code it +is unpredictable what values the variables C<$thing> and C<$color> +will have at run-time (this fact is most probably one of the reasons +you have written your program for). + +However, at run-time, Perl will have interpolated the values already +I __() (resp. the underlying gettext() function) has seen the +original string. Consequently something like "This is the red car.\n" +will be looked up in the message catalog, it will not be found (because +only "This is the $color $thing.\n" is included in the database), +and the original, untranslated string will be returned. +Honestly, because this is almost always an error, the xgettext(1) +program will bail out with a fatal error when it comes across that +string in your code. + +There are two workarounds for that: + + printf __"This is the %s %s.\n", $color, $thing; + +But that has several disadvantages: Your translator will only +see the isolated string, and without the surrounding code it +is almost impossible to interpret it correctly. Of course, GNU +emacs and other software capable of editing PO translation files +will allow you to examine the context in the source code, but it +is more likely that your translator will look for a less challenging +translation project when she frequently comes across such messages. + +And even if she does understand the underlying programming, what +if she has to reorder the color and the thing like in French: + + msgid "This is the red car.\n"; + msgstr "Cela est la voiture rouge.\n" + +Zut alors! While it is possible to reorder the arguments to printf() +and friends, it requires a syntax that is is nothing that you want to +learn. + +So what? The Perl backend to GNU gettext has defined an alternative +format for interpolatable strings: + + "This is the {color} {thing}.\n"; + +Instead of Perl variables you use place-holders (legal Perl variables +are also legal place-holders) in curly braces, and then you call + + print __x ("This is the {color} {thing}.\n", + thing => $thang, + color => $color); + +The function __x() will take the additional hash and replace all +occurencies of the hash keys in curly braces with the corresponding +values. Simple, readable, understandable to translators, what else +would you want? And if the translator forgets, misspells or otherwise +messes up some "variables", the msgfmt(1) program, that is used to +compile the textual translation file into its binary representation +will even choke on these errors and refuse to compile the translation. + +=item B<__n MSGID, MSGID_PLURAL, COUNT> + +Whew! That looks complicated ... It is best explained with an example. +We'll have another look at your vintage code: + + if ($files_deleted > 1) { + print "All files have been deleted.\n"; + } else { + print "One file has been deleted.\n"; + } + +Your intent is clear, you wanted to avoid the cumbersome +"1 files deleted". This is okay for English, but other languages +have more than one plural form. For example in Russian it makes +a difference whether you want to say 1 file, 3 files or 6 files. +You will use three different forms of the noun 'file' in each +case. [Note: Yep, very smart you are, the Russian word for 'file' +is in fact the English word, and it is an invariable noun, but if you +know that, you will also understand the rest despite this little +simplification ...]. + +That is the reason for the existance of the function ngettext(), +that __n() is a short-cut for: + + print __n"One file has been deleted.\n", + "All files have been deleted.\n", + $files_deleted; + +Alternatively: + + print __n ("One file has been deleted.\n", + "All files have been deleted.\n", + $files_deleted); + +The effect is always the same: libintl-perl will find out which +plural form to pick for your user's language, and the output string +will always look okay. + +=item B<__nx MSGID, MSGID_PLURAL, COUNT, VAR1 =E VAL1, VAR2 =E VAL2, ...> + +Bringing it all together: + + print __nx ("One file has been deleted.\n", + "{count} files have been deleted.\n", + $num_files, + count => $num_files); + +The function __nx() picks the correct plural form (also for English!) +I it is capable of interpolating variables into strings. + +Have a close look at the order of arguments: The first argument is the +string in the singular, the second one is the plural string. The third +one is an integer indicating the number of items. This third argument +is I used to pick the correct translation. The optionally +following arguments make up the hash used for interpolation. In the +beginning it is often a little confusing that the variable holding the +number of items will usually be repeated somewhere in the interpolation +hash. + +=item B<__xn MSGID, MSGID_PLURAL, COUNT, VAR1 =E VAL1, VAR2 =E VAL2, ...> + +Does exactly the same thing as __nx(). In fact it is a common typo +promoted to a feature. + +=item B<__p MSGCTXT, MSGID> + +This is much like __. The "p" stands for "particular", and the MSGCTXT +is used to provide context to the translator. This may be neccessary +when your string is short, and could stand for multiple things. For example: + + print __p"Verb, to view", "View"; + print __p"Noun, a view", "View"; + +The above may be "View" entries in a menu, where View->Source and File->View +are different forms of "View", and likely need to be translated differently. + +A typical usage are GUI programs. Imagine a program with a main +menu and the notorious "Open" entry in the "File" menu. Now imagine, +there is another menu entry Preferences->Advanced->Policy where you have +a choice between the alternatives "Open" and "Closed". In English, "Open" +is the adequate text at both places. In other languages, it is very +likely that you need two different translations. Therefore, you would +now write: + + __p"File|", "Open"; + __p"Preferences|Advanced|Policy", "Open"; + +In English, or if no translation can be found, the second argument +(MSGID) is returned. + +This function was introduced in libintl-perl 1.17. + +=item B<__px MSGCTXT, MSGID, VAR1 =E VAL1, VAR2 =E VAL2, ...> + +Like __p(), but supports variable substitution in the string, like __x(). + + print __px("Verb, to view", "View {file}", file => $filename); + +See __p() and __x() for more details. + +This function was introduced in libintl-perl 1.17. + +=item B<__np MSGCTXT, MSGID, MSGID_PLURAL, COUNT> + +This adds context to plural calls. It should not be needed very often, +if at all, due to the __nx() function. The type of variable substitution +used in other gettext libraries (using sprintf-like sybols, like %s or %1) +sometimes required context. For a (bad) example of this: + + printf (__np("[count] files have been deleted", + "One file has been deleted.\n", + "%s files have been deleted.\n", + $num_files), + $num_files); + +NOTE: The above usage is discouraged. Just use the __nx() call, which +provides inline context via the key names. + +This function was introduced in libintl-perl 1.17. + +=item B<__npx MSGCTXT, MSGID, MSGID_PLURAL, COUNT, VAR1 =E VAL1, VAR2 =E VAL2, ...> + +This is provided for comleteness. It adds the variable interpolation +into the string to the previous method, __np(). + +It's usage would be like so: + + print __npx ("Files being permenantly removed", + "One file has been deleted.\n", + "{count} files have been deleted.\n", + $num_files, + count => $num_files); + +I cannot think of any situations requiring this, but we can easily +support it, so here it is. + +This function was introduced in libintl-perl 1.17. + +=item B + +A no-op function that simply echoes its arguments to the caller. Take +the following piece of Perl: + + my @options = ( + "Open", + "Save", + "Save As", + ); + + ... + + my $option = $options[1]; + +Now say that you want to have this translatable. You could sometimes +simply do: + + my @options = ( + __"Open", + __"Save", + __"Save As", + ); + + ... + + my $option = $options[1]; + +But often times this will not be what you want, for example when you +also need the unmodified original string. Sometimes it may not even +work, for example, when the preferred user language is not yet +determined at the time that the list is initialized. + +In these cases you would write: + + my @options = ( + N__"Open", + N__"Save", + N__"Save As", + ); + + ... + + my $option = __($options[1]); + # or: my $option = dgettext ('my-domain', $options[1]); + +Now all the strings in C<@options> will be left alone, since N__() +returns its arguments (one ore more) unmodified. Nevertheless, the +string extractor will be able to recognize the strings as being +translatable. And you can still get the translation later by passing +the variable instead of the string to one of the above translation +functions. + +=item B + +Does exactly the same as N__(). You will use this form if you have +to mark the strings as having plural forms. + +=item B + +Marks B as N__() does, but in the context B. + +=item B + +Marks B as N__n() does, but in the context B. +=back + +=head1 EXPORTED VARIABLES + +The module exports several variables into your namespace: + +=over 4 + +=item B<%__> + +A tied hash. Its keys are your original messages, the values are +their translations: + + my $title = "

$__{'My Homepage'}

"; + +This is much better for your translation team than + + my $title = __"

My Homepage

"; + +In the second case the HTML code will make it into the translation +database and your translators have to be aware of HTML syntax when +translating strings. + +B Do I use this hash outside of double-quoted strings! +The code in the tied hash object relies on the correct working of +the function caller() (see "perldoc -f caller"), and this function +will report incorrect results if the tied hash value is the argument +to a function from another package, for example: + + my $result = Other::Package::do_it ($__{'Some string'}); + +The tied hash code will see "Other::Package" as the calling package, +instead of your own package. Consequently it will look up the message +in the wrong text domain. There is no workaround for this bug. +Therefore: + +Never use the tied hash interpolated strings! + +=item B<$__> + +A reference to C<%__>, in case you prefer: + + my $title = "

$__->{'My Homepage'}

"; + +=back + +=head1 CLASS METHODS + +The following class methods are defined: + +=over 4 + +=item B + +Returns a space-separated list of all '--keyword' and all '--flag' options +for B, when extracing strings from Perl source files localized +with B. + +The option should rather be called B. With regard +to the typical use-case, a shorter name has been picked: + + xgettext `perl -MLocale::TextDomain -e 'print Locale::TextDomain->options'` + +See L +for more information about the xgettext options '--keyword' and '--flag'. + +If you want to disable the use of the xgettext default keywords, you +should pass an option '--keyword=""' to xgettext before the options returned +by this method. + +If you doubt the usefulness of this method, check the output on the +command-line: + + perl -MLocale::TextDomain -e 'print Locale::TextDomain->options' + +Nothing that you want to type yourself. + +This method was added in libintl-perl 1.28. + +=item B + +Returns a space-separated list of all '--keyword' options for B +so that all translatable strings are properly extracted. + +This method was added in libintl-perl 1.28. + +=item B + +Returns a space-separated list of all '--flag' options for B +so that extracted strings are properly flagged. + +This method was added in libintl-perl 1.28. + +=back + +=head1 PERFORMANCE + +Message translation can be a time-consuming task. Take this little +example: + + 1: use Locale::TextDomain ('my-domain'); + 2: use POSIX (:locale_h); + 3: + 4: setlocale (LC_ALL, ''); + 5: print __"Hello world!\n"; + +This will usually be quite fast, but in pathological cases it may +run for several seconds. A worst-case scenario would be a +Chinese user at a terminal that understands the codeset Big5-HKSCS. +Your translator for Chinese has however chosen to encode the translations +in the codeset EUC-TW. + +What will happen at run-time? First, the library will search and load a +(maybe large) message catalog for your textdomain 'my-domain'. Then +it will look up the translation for "Hello world!\n", it will find that +it is encoded in EUC-TW. Since that differs from the output codeset +Big5-HKSCS, it will first load a conversion table containing several +ten-thousands of codepoints for EUC-TW, then it does the same with +the smaller, but still very large conversion table for Big5-HKSCS, +it will convert the translation on the fly from EUC-TW into Big5-HKSCS, +and finally it will return the converted translation. + +A worst-case scenario but realistic. And for these five lines of codes, +there is not much you can do to make it any faster. You should understand, +however, I the different steps will take place, so that you can +arrange your code for it. + +You have learned in the section L that line 1 is +responsible for locating your message database. However, the +use() will do nothing more than remembering your settings. It will +not search any directories, it will not load any catalogs or +conversion tables. + +Somewhere in your code you will always have a call to +POSIX::setlocale(), and the performance of this call may be time-consuming, +depending on the architecture of your system. On some systems, this +will consume very little time, on others it will only consume a +considerable amount of time for the first call, and on others it may +always be time-consuming. Since you cannot know, how setlocale() is +implemented on the target system, you should reduce the calls to +setlocale() to a minimum. + +Line 5 requests the translation for your string. Only now, the library +will actually load the message catalog, and only now will it load +eventually needed conversion tables. And from now on, all this information +will be cached in memory. This strategy is used throughout libintl-perl, +and you may describe it as 'load-on-first-access'. Getting the next +translation will consume very little resources. + +However, although the translation retrieval is somewhat obfuscated +by an operator-like function call, it is still a function call, and in +fact it even involves a chain of function calls. Consequently, the +following example is probably bad practice: + + foreach (1 .. 100_000) { + print __"Hello world!\n"; + } + +This example introduces a lot of overhead into your program. Better +do this: + + my $string = __"Hello world!\n"; + foreach (1 .. 100_000) { + print $string; + } + +The translation will never change, there is no need to retrieve it +over and over again. Although libintl-perl will of course cache +the translation read from the file system, you can still avoid the +overhead for the function calls. + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::Messages(3pm), Locale::gettext_pp(3pm), perl(1), +gettext(1), gettext(3) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/Util.pm b/lib/Locale/Util.pm new file mode 100644 index 0000000..9c0c8b3 --- /dev/null +++ b/lib/Locale/Util.pm @@ -0,0 +1,1209 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Portable methods for locale handling. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::Util; + +use strict; + +use constant DEBUG => 0; + +use base qw (Exporter); + +use vars qw (@EXPORT_OK); + +@EXPORT_OK = qw (parse_http_accept_language + parse_http_accept_charset + set_locale set_locale_cache get_locale_cache + web_set_locale); + +# The following list maps languages to a rough guess of the country that +# is most likely to be meant if no locale info for the country alone is +# found. I have assembled the list to the best of my knowledge, preferring +# the country that has the language as its official language, and in doubt +# listing the country that has the most speakers of that language. Corrections +# are welcome. +use constant LANG2COUNTRY => { + aa => 'ET', # Afar => Ethiopia + ab => 'AB', # Abkhazian => Georgia + # ae => '??', # Avestan => ??, Iran? + af => 'za', # Afrikaans => South Africa + am => 'ET', # Amharic => Ethiopia + ar => 'EG', # Arabic => Egypt + as => 'IN', # Assamese => India + ay => 'BO', # Aymara => Bolivia + az => 'AZ', # Azerbaijani => Azerbaijan + ba => 'RU', # Bashkir => Russia + be => 'BY', # Belarusian => Belarus + bg => 'BG', # Bulgarian => Bulgaria + bh => 'IN', # Bihari => India + bi => 'VU', # Bislama => Vanuatu + bn => 'BD', # Bengali => Bangladesh + bo => 'CN', # Tibetan => China + br => 'FR', # Breton => France + bs => 'BA', # Bosnian => Bosnia and Herzegovina + ca => 'ES', # Catalan => Spain + ce => 'RU', # Chechen => Russia + ch => '??', # Chamorro => Guam (or mp?) + co => 'FR', # Corsican => France + cs => 'CZ', # Czech => Czech Republic + cu => 'BG', # Church Slavic => Bulgaria + cv => 'RU', # Chuvash => Russia + cy => 'GB', # Welsh => United Kingdom + da => 'DK', # Danish => Denmark + de => 'DE', # German => Germany + dz => 'BT', # Dzongkha => Bhutan + el => 'GR', # Greek => Greece + en => 'US', # English => United States + es => 'ES', # Actually Mexico and the US have more Spanish speakers + # than Spain. But it can be assumed that they either add + # the country to their browser settings or will not care + # to much. + et => 'EE', # Estonian => Estonia + fa => 'IR', # Iran, Islamic Republic of + fi => 'FI', # Finnish => Finland + fj => 'FJ', # Fijian => Fiji + fo => 'FO', # Faeroese => Faroe Islands + fr => 'FR', # French => France + fy => 'FY', # Frisian => Netherlands + ga => 'IE', # Irish => Ireland + gd => 'GB', # Gaelic (Scots) => United Kingdom + gl => 'ES', # Gallegan => Spain + gn => 'PY', # Guarani => Paraguay + gu => 'IN', # Gujarati => IN + gv => 'GB', # Manx => United Kingdom + ha => 'NE', # Hausa => Niger (ng?) + he => 'IL', # Hebrew => Israel + hi => 'IN', # Hindi => India + ho => 'PG', # Hiri Motu => Papua New Guinea + hr => 'HR', # Croatian + hu => 'HU', # Hungarian => Hungary + hy => 'AM', # Armenian => Armenia + hz => 'NA', # Herero => Namibia + # ia => '??', # Interlingua (aka "latino sine flexione") => ?? + id => 'ID', # Indonesian => Indonesia + # ie => '??', # Interlingue => ??? + ik => 'US', # Inupiaq => United States + is => 'IS', # Icelandic => Iceland + it => 'IT', # Italian => Italy + iu => 'CA', # Inuktitut => Canada + iw => 'IL', # Hebrew => Israel + ja => 'JP', # Japanese => Japan + jw => 'ID', # Javanese => Indonesia + ka => 'GE', # Georgian => Georgia + ki => 'KE', # Kikuyu => Kenya + kj => 'AO', # Kuanyama => Angola (na?) + kk => 'KZ', # Kazakh => Kazakhstan + kl => 'GL', # Kalaallisut => Greenland + km => 'KH', # Khmer => Cambodia + kn => 'IN', # Kannada => India + ko => 'KR', # Korean => Korea, Republic of (more speakers than North Korea) + ks => 'IN', # Kashmiri => India + ku => 'TR', # Kurdish => Turkey + kv => 'RU', # Komi => Russia + kw => 'GB', # Cornish => United Kingdom + ky => 'KG', # Kirghyz => Kyrgyzstan + la => 'VA', # Latin => Holy See (Vatican City State) + lb => 'LU', # Letzeburgesch => Luxembourg + ln => 'CG', # Lingala => Republic of the Congo (cd?) + lo => 'LA', # Lao => Lao People's Democratic Republic + lt => 'LT', # Lithuanian => Lithuania + lv => 'LV', # Latvian => Latvia + mg => 'MG', # Malagasy => Madagascar + mh => 'MH', # Marshall => Marshall Islands + mi => 'NZ', # Maori => New Zealand + mk => 'MK', # Macedonian => Macedonia, the Former Yugoslav Republic of + ml => 'IN', # Malayalam => India + mn => 'MN', # Mongolian => Mongolia + mr => 'IN', # Marathi => India + ms => 'MY', # Malay => Malaysia (FIXME: not really sure ...) + mt => 'MT', # Maltese => Malta + my => 'MM', # Burmese => Myanmar + na => 'NR', # Nauru => Nauru + nb => 'NO', # Norwegian Bokmål => Norway + nd => 'ZA', # Ndebele, North => South Africa + ne => 'NP', # Nepali => Nepal + ng => 'NA', # Ndonga => Namibia + nl => 'NL', # Dutch => Netherlands + nn => 'NO', # Norwegian Nynorsk => Norway + no => 'NO', # Norwegian => Norway + nr => 'ZA', # Ndebele, South => South Africa + nv => 'US', # Navajo => United States + ny => 'MW', # Chichewa; Nyanja => Malawi + oc => 'FR', # Occitan (post 1500) => France + om => 'ET', # Oromo => Ethiopia + or => 'IN', # Oriya => India + os => 'RU', # Ossetian; Ossetic => Russia (FIXME: Or Georgia?) + pa => 'IN', # Panjabi => India + pi => 'IN', # Pali => India (FIXME: Or Thailand, Sri Lanka, Myanmar, + # Cambodia) + pl => 'PL', # Polish => Poland + ps => 'PK', # Pushto => Pakistan + pt => 'PT', # Portuguese => Portugal (following our rules this should + # actually be Brazil but that would be to unrealistic, + # people from Brazil set their locale to pt_BR). + qu => 'PE', # Quechua => Peru + rm => 'CH', # Rhaeto-Romance => Switzerland + rn => 'RW', # Rundi => Rwanda + ro => 'RO', # Romanian => Romania + ru => 'RU', # Russian => Russia + rw => 'RW', # Kinyarwanda => Rwanda + sa => 'IN', # Sanskrit => India + sc => 'IT', # Sardinian => Italy + sd => 'IN', # Sindhi => India + se => 'SE', # Sami => Sweden (Totally unsure here. The Sami languages + # are also spoken in Norway, Finland and Russia, but the + # largest part of the area seems to be in Sweden. + sg => '??', # Sango => Central African Republic + si => 'LK', # Sinhalese => Sri Lanka + sk => 'SK', # Slovakian => Slovakia + sl => 'SI', # Slovenian => Slovenia + sm => 'WS', # Samoan => Samoa + sh => 'ZW', # Shona => Zimbabwe (FIXME: Rather Mozambique?) + so => 'SO', # Somali => Somalia + sq => 'AL', # Albanian => Albania + sr => 'YU', # Serbian => Yugoslavia + ss => '??', # Swati => Swaziland (za?) + st => 'LS', # Sotho => Lesotho + su => 'IN', # Sundanese => Indonesia + sv => 'SE', # Swedish => Sweden + sw => 'TZ', # Suaheli => Tanzania, United Republic of + ta => 'LK', # Tamil => Sri Lanka + te => 'IN', # Telugu => India + tg => 'TJ', # Tajik => Tajikistan + th => 'TH', # Thai => Thailand + ti => 'ER', # Tigrinya => Eritrea + tk => 'TM', # Turkmen => Turkmenistan + tl => 'PH', # Tagalog => Philippines + tn => 'BW', # Tswana => Botswana + to => 'TO', # Tonga => Tonga + tr => 'TR', # Turkish => Turkish + tt => 'RU', # Tatar => Russia + tw => 'GH', # Twi => Ghana + ug => 'CN', # Uighur => China + uk => 'UA', # Ukrainian => Ukraine + ur => 'PK', # Urdu => Pakistan + uz => 'UZ', # Uzbek => Uzbekistan + vi => 'VN', # Vietnamese => Vietnam + # vo => '??', # Volapuk => Nowhere + wo => 'SN', # Wolof => Senegal + xh => 'ZA', # Xhosa => South Africa + yi => 'IL', # Yiddish => Israel (FIXME: Rather United States?) + yo => 'NG', # Yoruba => Nigeria + za => 'CN', # Zhuang => China + zh => 'CN', # Chinese => China + zu => 'ZA', # Zulu => South Africa +}; + +use constant WIN32LANGUAGE => { + aa => "Afar", + ab => "Abkhazian", + ae => "Avestan", + af => "Afrikaans", + am => "Amharic", + ar => "Arabic", + as => "Assamese", + ay => "Aymara", + az => "Azerbaijani", + ba => "Bashkir", + be => "Belarusian", + bg => "Bulgarian", + bh => "Bihari", + bi => "Bislama", + bn => "Bengali", + bo => "Tibetan", + br => "Breton", + bs => "Bosnian", + ca => "Catalan", + ce => "Chechen", + ch => "Chamorro", + co => "Corsican", + cs => "Czech", + cu => "Church Slavic", + cv => "Chuvash", + cy => "Welsh", + da => "Danish", + de => "German", + dz => "Dzongkha", + el => "Greek", + en => "English", + eo => "Esperanto", + es => "Spanish", + et => "Estonian", + eu => "Basque", + fa => "Persian", + fi => "Finnish", + fj => "Fijian", + fo => "Faeroese", + fr => "French", + fy => "Frisian", + ga => "Irish", + gd => "Gaelic (Scots)", + gl => "Gallegan", + gn => "Guarani", + gu => "Gujarati", + gv => "Manx", + ha => "Hausa", + he => "Hebrew", + hi => "Hindi", + ho => "Hiri Motu", + hr => "Croatian", + hu => "Hungarian", + hy => "Armenian", + hz => "Herero", + ia => "Interlingua", + id => "Indonesian", + ie => "Interlingue", + ik => "Inupiaq", + is => "Icelandic", + it => "Italian", + iu => "Inuktitut", + ja => "Japanese", + jw => "Javanese", + ka => "Georgian", + ki => "Kikuyu", + kj => "Kuanyama", + kk => "Kazakh", + kl => "Kalaallisut", + km => "Khmer", + kn => "Kannada", + ko => "Korean", + ks => "Kashmiri", + ku => "Kurdish", + kv => "Komi", + kw => "Cornish", + ky => "Kirghiz", + la => "Latin", + lb => "Letzeburgesch", + ln => "Lingala", + lo => "Lao", + lt => "Lithuanian", + lv => "Latvian", + mg => "Malagasy", + mh => "Marshall", + mi => "Maori", + # Sorry, lads, but that is what M$ calls your language ... + mk => "FYRO Macedonian", + ml => "Malayalam", + mn => "Mongolian", + mo => "Moldavian", + mr => "Marathi", + ms => "Malay", + mt => "Maltese", + my => "Burmese", + na => "Nauru", + nb => "Norwegian (Bokmål)", + nd => "Ndebele, North", + ne => "Nepali", + ng => "Ndonga", + nl => "Dutch", + nn => "Norwegian-Nynorsk", + no => "Norwegian-Nynorsk", + nr => "Ndebele, South", + nv => "Navajo", + ny => "Chichewa", + oc => "Occitan (post 1500)", + om => "Oromo", + or => "Oriya", + os => "Ossetian", + pa => "Panjabi", + pi => "Pali", + pl => "Polish", + ps => "Pushto", + pt => "Portuguese", + qu => "Quechua", + rm => "Rhaeto-Romance", + rn => "Rundi", + ro => "Romanian", + ru => "Russian", + rw => "Kinyarwanda", + sa => "Sanskrit", + sc => "Sardinian", + sd => "Sindhi", + se => "Sami", + sg => "Sango", + si => "Sinhalese", + sk => "Slovak", + sl => "Slovenian", + sm => "Samoan", + sn => "Shona", + so => "Somali", + sq => "Albanian", + sr => "Serbian", + ss => "Swati", + st => "Sotho", + su => "Sundanese", + sv => "Swedish", + sw => "Swahili", + ta => "Tamil", + te => "Telugu", + tg => "Tajik", + th => "Thai", + ti => "Tigrinya", + tk => "Turkmen", + tl => "Tagalog", + tn => "Tswana", + to => "Tonga", + tr => "Turkish", + ts => "Tsonga", + tt => "Tatar", + tw => "Twi", + ug => "Uighur", + uk => "Ukrainian", + ur => "Urdu", + uz => "Uzbek", + vi => "Vietnamese", + vo => "Volapuk", + wo => "Wolof", + xh => "Xhosa", + yi => "Yiddish", + yo => "Yoruba", + za => "Zhuang", + zh => "Chinese", + zu => "Zulu", +}; + +use constant WIN32COUNTRY => { + ad => "Andorra", + ae => "United Arab Emirates", + af => "Afghanistan", + ag => "Antigua and Barbuda", + ai => "Anguilla", + al => "Albania", + am => "Armenia", + an => "Netherlands Antilles", + ao => "Angola", + aq => "Antarctica", + ar => "Argentina", + as => "American Samoa", + at => "Austria", + au => "Australia", + aw => "Aruba", + ax => "Aland Islands", + az => "Azerbaijan", + ba => "Bosnia and Herzegovina", + bb => "Barbados", + bd => "Bangladesh", + be => "Belgium", + bf => "Burkina Faso", + bg => "Bulgaria", + bh => "Bahrain", + bi => "Burundi", + bj => "Benin", + bm => "Bermuda", + bn => "Brunei Darussalam", + bo => "Bolivia", + br => "Brazil", + bs => "Bahamas", + bt => "Bhutan", + bv => "Bouvet Island", + bw => "Botswana", + by => "Belarus", + bz => "Belize", + ca => "Canada", + cc => "Cocos (Keeling) Islands", + cd => "Congo, The Democratic Republic of the", + cf => "Central African Republic", + cg => "Congo", + ch => "Switzerland", + ci => "Cote D'Ivoire", + ck => "Cook Islands", + cl => "Chile", + cm => "Cameroon", + cn => "China", + co => "Colombia", + cr => "Costa Rica", + cs => "Serbia and Montenegro", + cu => "Cuba", + cv => "Cape Verde", + cx => "Christmas Island", + cy => "Cyprus", + cz => "Czech Republic", + de => "Germany", + dj => "Djibouti", + dk => "Denmark", + dm => "Dominica", + do => "Dominican Republic", + dz => "Algeria", + ec => "Ecuador", + ee => "Estonia", + eg => "Egypt", + eh => "Western Sahara", + er => "Eritrea", + es => "Spain", + et => "Ethiopia", + fi => "Finland", + fj => "Fiji", + fk => "Falkland Islands (Malvinas)", + fm => "Micronesia, Federated States of", + fo => "Faroe Islands", + fr => "France", + fx => "France, Metropolitan", + ga => "Gabon", + gb => "United Kingdom", + gd => "Grenada", + ge => "Georgia", + gf => "French Guiana", + gh => "Ghana", + gi => "Gibraltar", + gl => "Greenland", + gm => "Gambia", + gn => "Guinea", + gp => "Guadeloupe", + gq => "Equatorial Guinea", + gr => "Greece", + gs => "South Georgia and the South Sandwich Islands", + gt => "Guatemala", + gu => "Guam", + gw => "Guinea-Bissau", + gy => "Guyana", + hk => "Hong Kong", + hm => "Heard Island and McDonald Islands", + hn => "Honduras", + hr => "Croatia", + ht => "Haiti", + hu => "Hungary", + id => "Indonesia", + ie => "Ireland", + il => "Israel", + in => "India", + io => "British Indian Ocean Territory", + iq => "Iraq", + ir => "Iran", + is => "Iceland", + it => "Italy", + jm => "Jamaica", + jo => "Jordan", + jp => "Japan", + ke => "Kenya", + kg => "Kyrgyzstan", + kh => "Cambodia", + ki => "Kiribati", + km => "Comoros", + kn => "Saint Kitts and Nevis", + kp => "North-Korea", + kr => "Korea", + kw => "Kuwait", + ky => "Cayman Islands", + kz => "Kazakhstan", + la => "Laos", + lb => "Lebanon", + lc => "Saint Lucia", + li => "Liechtenstein", + lk => "Sri Lanka", + lr => "Liberia", + ls => "Lesotho", + lt => "Lithuania", + lu => "Luxembourg", + lv => "Latvia", + ly => "Libyan", + ma => "Morocco", + mc => "Monaco", + md => "Moldova", + mg => "Madagascar", + mh => "Marshall Islands", + mk => "Former Yugoslav Republic of Macedonia", + ml => "Mali", + mm => "Myanmar", + mn => "Mongolia", + mo => "Macao", + mp => "Northern Mariana Islands", + mq => "Martinique", + mr => "Mauritania", + ms => "Montserrat", + mt => "Malta", + mu => "Mauritius", + mv => "Maldives", + mw => "Malawi", + mx => "Mexico", + my => "Malaysia", + mz => "Mozambique", + na => "Namibia", + nc => "New Caledonia", + ne => "Niger", + nf => "Norfolk Island", + ng => "Nigeria", + ni => "Nicaragua", + nl => "Netherlands", + no => "Norway", + np => "Nepal", + nr => "Nauru", + nu => "Niue", + nz => "New Zealand", + om => "Oman", + pa => "Panama", + pe => "Peru", + pf => "French Polynesia", + pg => "Papua New Guinea", + ph => "Philippines", + pk => "Pakistan", + pl => "Poland", + pm => "Saint Pierre and Miquelon", + pn => "Pitcairn", + pr => "Puerto Rico", + ps => "Palestinian Territory, Occupied", + pt => "Portugal", + pw => "Palau", + py => "Paraguay", + qa => "Qatar", + re => "Reunion", + ro => "Romania", + ru => "Russian Federation", + rw => "Rwanda", + sa => "Saudi Arabia", + sb => "Solomon Islands", + sc => "Seychelles", + sd => "Sudan", + se => "Sweden", + sg => "Singapore", + sh => "Saint Helena", + si => "Slovenia", + sj => "Svalbard and Jan Mayen", + sk => "Slovakia", + sl => "Sierra Leone", + sm => "San Marino", + sn => "Senegal", + so => "Somalia", + sr => "Suriname", + st => "Sao Tome and Principe", + sv => "El Salvador", + sy => "Syrian Arab Republic", + sz => "Swaziland", + tc => "Turks and Caicos Islands", + td => "Chad", + tf => "French Southern Territories", + tg => "Togo", + th => "Thailand", + tj => "Tajikistan", + tk => "Tokelau", + tl => "Timor-Leste", + tm => "Turkmenistan", + tn => "Tunisia", + to => "Tonga", + tr => "Turkey", + tt => "Trinidad and Tobago", + tv => "Tuvalu", + tw => "Taiwan, Province of China", + tz => "Tanzania, United Republic of", + ua => "Ukraine", + ug => "Uganda", + um => "United States Minor Outlying Islands", + us => "United States", + uy => "Uruguay", + uz => "Uzbekistan", + va => "Holy See (Vatican City State)", + vc => "Saint Vincent and the Grenadines", + ve => "Venezuela", + vg => "Virgin Islands, British", + vi => "Virgin Islands, U.S.", + vn => "Vietnam", + vu => "Vanuatu", + wf => "Wallis and Futuna", + ws => "Samoa", + ye => "Yemen", + yt => "Mayotte", + za => "South Africa", + zm => "Zambia", + zw => "Zimbabwe", +}; + +my $locale_cache; + +sub parse_http_accept_language { + my ($string) = @_; + + my @tokens = split / *, */, $string; + + my %retval; + foreach my $token (@tokens) { + my $quality = 1; + # This RE is more forgiving than the standard. It accepts + # values greater than 1.0 and with more fractional digits + # than 3. + if ($token =~ s/ *; *q *= *([0-9]+(?:\.([0-9]+))?)$//) { + $quality = $1; + } + $retval{$token} = $quality; + } + + # RFC 2616 only allows 1-8 characters for language and country + # but we are more forgiving. + return grep { + /^[A-Za-z]+(?:-[A-Za-z]+)?$/ + } map { + $_ = 'C' if $_ eq '*'; $_ + } sort { + $retval{$b} <=> $retval{$a} + } keys %retval; +} + +sub parse_http_accept_charset { + my ($string) = @_; + + my @tokens = split / *, */, $string; + + my %retval; + foreach my $token (@tokens) { + my $quality = 1; + # This RE is more forgiving than the standard. It accepts + # values greater than 1.0 and with more fractional digits + # than 3. + if ($token =~ s/ *; *q *= *([0-9]+(?:\.([0-9]+))?)$//) { + $quality = $1; + } + $retval{$token} = $quality; + } + + return grep { + # This is really allowed in character set names ... + /^[-!\#\$\%\&\'\+\.0-9A-Z_\`a-z\|\~]+$/ + } map { + $_ = undef if $_ eq '*'; $_ + } sort { + $retval{$b} <=> $retval{$a} + } keys %retval; +} + +sub set_locale { + my ($category, $language, $country, $charset) = @_; + + require POSIX; + + $country = '' unless defined $country; + $charset = '' unless defined $charset; + + my $set_locale; + # Look up the cache first. + if (my $retval = $locale_cache->{$language}->{$country}->{$charset}) { + my ($locale, $country) = @$retval; + POSIX::setlocale ($category, $locale); + return @$retval; + } + + # Initialize the cache with the undefined value so that we can do + # error returns without setting it. + $locale_cache->{$language}->{$country}->{$charset} = undef; + + my $windows = ($^O !~ /darwin/i && $^O =~ /win/i) ? 1 : 0; + if ($windows) { + return &__set_locale_windows; + } + + my $set_language; + my $set_country; + + # First we try to only use the language. + my @languages = ($language); + my @lc_languages = map { lc $_ } @languages; + my @uc_languages = map { uc $_ } @languages; + my %seen = (); + + foreach my $language (@languages, @lc_languages, @uc_languages) { + next if $seen{$language}++; + warn "Trying lingua only setlocale '$language'.\n" if DEBUG; + my $result = POSIX::setlocale ($category, $language); + if ($result) { + $set_locale = $set_language = $result if $result; + last; + } + } + + # Now try it with the country appended. + my @countries = length $country ? ($country) : (); + my @uc_countries = map { uc $_ } @countries; + my @lc_countries = map { uc $_ } @countries; + push @countries, @uc_countries, @lc_countries; + + LINGUA: foreach my $language (@languages, @lc_languages, @uc_languages) { + my $count = 0; + my @guessed_countries = (LANG2COUNTRY->{lc $language}, + lc LANG2COUNTRY->{lc $language}, + uc LANG2COUNTRY->{lc $language}); + foreach my $c (@countries, @guessed_countries) { + ++$count; + next unless defined $c && length $c; + my $try = $language . '_' . $c; + next if $seen{$try}++; + warn "Trying setlocale '$try'.\n" if DEBUG; + my $result = POSIX::setlocale ($category, $try); + if ($result) { + $set_locale = $result; + if ($count >= @countries) { + $set_country = $c; + } else { + $set_country = $country; + } + + last LINGUA; + } + } + } + + unless (length $charset) { + return unless defined $set_locale && length $set_locale; + + $locale_cache->{$language}->{$country}->{$charset} = + [$set_locale, $set_country]; + return wantarray ? ($set_locale, $set_country) : $set_locale; + } + + my @charsets = ($charset); + my $cleaned = $charset; + push @charsets, $cleaned if $cleaned =~ s/-//g; + my @lc_charsets = map { lc $charset } @charsets; + my @uc_charsets = map { uc $charset } @charsets; + push @charsets, @lc_charsets, @uc_charsets; + + %seen = (); + LINGUA2: foreach my $language (@languages, + @lc_languages, @uc_languages) { + my @guessed_countries = (LANG2COUNTRY->{lc $language}, + lc LANG2COUNTRY->{lc $language}, + uc LANG2COUNTRY->{lc $language}); + my $count = 0; + foreach my $c (@countries, @guessed_countries) { + ++$count; + $c = '' unless defined $c && length $c; + my $country_try = $language; + $country_try .= (length $c) ? "_$c" : ''; + + foreach my $ch (@charsets, @lc_charsets, @uc_charsets) { + my $try = $country_try . '.' . $ch; + next if $seen{$try}++; + warn "Trying setlocale '$try'.\n" if DEBUG; + + my $result = POSIX::setlocale ($category, $try); + if ($result) { + $set_locale = $result; + if ($count >= @countries) { + $set_country = $c; + } else { + $set_country = $country; + } + + last LINGUA2; + } + } + } + } + + return unless defined $set_locale && length $set_locale; + + $locale_cache->{$language}->{$country}->{$charset} = + [$set_locale, $set_country]; + + return wantarray ? ($set_locale, $set_country) : $set_locale; +} + +sub __set_locale_windows { + my ($category, $language, $country, $charset) = @_; + + my $set_locale; + + $country = '' unless defined $country; + $charset = '' unless defined $charset; + + # First we try to only use the language. + my $long_language = WIN32LANGUAGE->{lc $language}; + my @languages = ($long_language, $language); + my %seen = (); + foreach my $language (@languages) { + next if $seen{$language}++; + warn "Trying lingua only setlocale '$language'.\n" if DEBUG; + my $result = POSIX::setlocale ($category, $language); + if ($result) { + $set_locale = $result if $result; + last; + } + } + + # Now try it with the country appended. + my $set_country; + if (length $country) { + COMBI: foreach my $language (@languages) { + # We do not need a fallback country here, because the "system" already + # provides the information. + my @short_countries = ($country); + my @countries = map { + WIN32COUNTRY->{lc $_} + } grep { length $_ } @short_countries; + foreach my $c (@countries) { + next unless defined $c && length $c; + my $try = $language . '_' . $c; + next if $seen{$try}++; + warn "Trying setlocale '$try'.\n" if DEBUG; + my $result = POSIX::setlocale ($category, $try); + if ($result) { + $set_locale = $result; + $set_country = $c; + last COMBI; + } + } + } + } + + return unless defined $set_locale && length $set_locale; + + # Apparently, there is no point in setting a charset. Even the new + # MS-DOS versions like 2000 or XP still have the concept of more or + # less fixed codepages. Switching to UTF-8 does not work. + $locale_cache->{$language}->{$country}->{$charset} = + [$set_locale, $set_country]; + return wantarray ? ($set_locale, $set_country) : $set_locale; +} + +sub get_locale_cache { + $locale_cache; +} + +sub set_locale_cache { + if (ref $_[0] && 'HASH' eq ref $_[0]) { + $locale_cache = $_[0]; + } else { + my %locale_cache = @_; + $locale_cache = \%locale_cache; + } +} + +sub web_set_locale { + my ($accept_language, $accept_charset, $category, $available) = @_; + + my %available; + if ($available) { + foreach (@$available) { + my $locale = $_; + $locale =~ s/[_\@\.].*//; + $available{lc $locale} = 1; + } + } + + my @languages; + if (ref $accept_language && 'ARRAY' eq ref $accept_language) { + @languages = @$accept_language; + } else { + @languages = parse_http_accept_language $accept_language; + } + + if ($available) { + my @all = @languages; + @languages = (); + foreach my $locale (@all) { + my $language = lc $locale; + $language =~ s/[_\@\.].*//; + push @languages, $locale if $available{$language}; + } + } + + my @charsets; + if (defined $accept_charset) { + if (ref $accept_charset && 'ARRAY' eq ref $accept_charset) { + @charsets = @$accept_charset; + } else { + @charsets = parse_http_accept_charset $accept_charset; + } + } + + unless (defined $category) { + require POSIX; + $category = POSIX::LC_ALL(); + } + + my ($set_locale, $set_language, $set_country, $set_charset); + foreach my $lang (@languages) { + my ($language, $country) = split /-/, $lang, 2; + + my ($locale, $country_used) = + set_locale ($category, $language, $country, $charsets[0]); + + if (defined $locale) { + # If a country was specified, we have to check whether it + # was actually selected. + if (defined $country) { + if (!defined $country + || ($country ne $country_used)) { + $set_language = $language; + $set_locale = $locale; + $set_country = $country_used; + $set_charset = $charsets[0]; + } + } + + if (wantarray) { + return $locale, $lang, $country_used, $charsets[0]; + } else { + return $locale; + } + } + } + + if (defined $set_locale) { + if (wantarray) { + return $set_locale, $set_language, $set_country, $set_charset; + } else { + return $set_locale; + } + } + + return; +} + +1; + +__END__ + +=head1 NAME + +Locale::Util - Portable l10n and i10n functions + +=head1 SYNOPSIS + + use Locale::Util; + + my @linguas = parse_http_accept_language $ENV{HTTP_ACCEPT_LANGUAGE}; + + my @charsets = parse_http_accept_charset $ENV{HTTP_ACCEPT_CHARSET}; + + # Trie to set the locale to Brasilian Portuguese in UTF-8. + my $set_locale = set_locale LC_ALL, 'pt', 'BR', 'utf-8'; + + set_locale_cache $last_cache; + + my $cache = get_locale_cache; + + web_set_locale ($ENV{HTTP_ACCEPT_LANGUAGE}, $ENV_ACCEPT_CHARSET); + + web_set_locale (['fr-BE', 'fr', 'it'], ['cp1252', 'utf-8']); + +=head1 DESCRIPTION + +This module provides portable functions dealing with localization +(l10n) and internationalization(i10n). It doesn't export anything +by default, you have to specify each function you need in the import +list, or use the fully qualified name. + +The functions here have a focus on web development, although they +are general enough to have them in the Locale:: namespace. + +This module is considered alpha code. The interface is not stable. +Please contact the author if you want to use it in production code. + +This module was introduced in libintl-perl 1.17. + +=head1 FUNCTIONS + +=over 4 + +=item B + +Parses a string as passed in the HTTP header "Accept-Language". +It returns a list of tokens sorted by the quality value, see RFC 2616 +for details. + +Example: + + parse_http_accept ("fr-fr, fr; q=0.7, de; q=0.3"); + +This means: Give me French for France with a quality value of 1.0 +(the maximum). Otherwise I will take any other French version +(quality 0.7), German has a quality of 0.3 for me. + +The function will return a list of tokens in the order of their quality +values, in this case "fr-fr", "fr" and "de". + +The function is more forgiving than RFC 2616. It accepts quality +values greater than 1.0 and with more than 3 decimal places. It +also accepts languages and country names with more than 8 characters. +The language "*" is translated into "C". + +=item B + +Parses a string as passed in the HTTP header "Accept-Charset". +It returns a list of tokens sorted by the quality value, see RFC 2616 +for details. + +The special character set "*" (means all character sets) will be +translated to the undefined value. + +=item B + +Tries to set the user locale by means of POSIX::setlocale(). The latter +function has the disadvantage, that its second argument (the locale +description string) is completely non-standard and system-dependent. +This function tries its best at guessing the system's notion of a locale +dientifier, with the arguments supplied: + +=over 8 + +=item B + +An integer argument for a valid locale category. These are the +LC_* constants (LC_ALL, LC_CTIME, LC_COLLATE, ...) defined in both +Locale::Messages(3pm) and POSIX(3pm). + +=item B + +A 2-letter language identifier as per ISO 639. Case doesn't matter, +but an unchanged version (ie. not lower-cased) of the language you +provided will always be tried to. + +=item B + +A 2-letter language identifier as per ISO 639. Case doesn't matter, +but an unchanged version (ie. not lower-cased) of the language you +provided will always be tried to. + +This parameter is optional. If it is not defined, the function will +try to guess an appropriate country, otherwise leave it to the +operating system. + +=item B + +A valid charset name. Valid means valid! The charset "utf8" is not +valid (it is "utf-8"). Charset names that are accepted by the +guessing algorithms in Encode(3pm) are also not necessarily valid. + +If the parameter is undefined, it is ignored. It is always ignored +under Windows. + +=back + +The function tries to approach the desired locale in loops, refining +it on every success. It will first try to set the language (for +any country), then try to select the correct language, and finally +try to select the correct charset. + +The return value is false in case of failure, or the return value +of the underlying POSIX::setlocale() call in case of success. + +In array context, the function returns the country name +that was passed in the successful +call to POSIX::setlocale(). If this string is equal to the country +name you passed as an argument, you can be reasonably sure that +the settings for this country are really used. If it is not +equal, the function has taken a guess at the country (it has a list +of "default" countries for each language). It seems that under +Windows, POSIX::setlocale() also succeeds, if you pass a country +name that is actually not supported. Therefore, the information +is not completely reliable. + +Please note that this function is intended for server processes +(especially web applications) that need to switch in a portable +way to a certain locale. It is B the recommended way to set +the program locale for a regular application. In a regular application +you should do the following: + + use POSIX qw (setlocale LC_ALL); + setlocale LC_ALL, ''; + +The empty string as the second argument means, that the system +should switch to the user's default locale. + +=item B + +The function set_locale() is potentially expansive, especially when +it fails, because it can try a lot of different combinations, and +the system may have to load a lot of locale definitions from its +internal database. + +In order to speed up things, results are internally cached in a +hash, keys are the languages, subkeys countries, subsubkeys the +charsets. You can get a reference to this hash with get_locale_cache(). + +The function cannot fail. + +=item B + +Sets the internal cache. You can either pass a hash or a hash reference. +The function will use this as its cache, discarding its old cache. +This allows you to keep the hash persistent. + +The function cannot fail. + +=item B + +Try to change the locale to the settings described by ACCEPT_LANGUAGE +and ACCEPT_CHARSET. For each argument you can either pass a string +as in the corresponding http header, or a reference to an array +of language resp. charset identifiers. + +Currently only the first charset passed is used as an argument. +You are strongly encouraged to pass a hard-coded value here, so +that you have control about your output. + +The argument B specifies the category (one of the LC_* +constants as defined in Locale::Messages(3pm) or in POSIX(3pm)). +The category defaults to LC_ALL. + +You can pass an optional reference to a list of locales in +XPG4 format that are available in your application. This is +useful if you know which languages are supported by your application. +In fact, only the language part of the values in the list are +considered (for example for "en_US", only "en" is used). The +country or other parts are ignored. + +The function returns the return value of the underlying set_locale() +call, or false on failure. + +The function returns false on failure. On success it returns the +return value of the underlying set_locale() call. This value can +be used directly in subsequent calls to POSIX::setlocale(). In +array context, it additionally returns the identifiers for the language, +the country, and the charset actually used. + +=back + +=head1 BUGS + +The function set_locale() probably fails to guess the correct locale +identifier on a lot of systems. If you have found such a case, +please submit it as a bug report. + +The bug tracking system for this packags is at +http://rt.cpan.org/NoAuth/Bugs.html?libintl-perl + +Please note that this module is considered alpha code, and the interface +is not stable. Please contact the author, if you want to use it in +production code. + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +POSIX(3pm), perl(1) + +=cut +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: +=cut diff --git a/lib/Locale/gettext_dumb.pm b/lib/Locale/gettext_dumb.pm new file mode 100755 index 0000000..3bebb1f --- /dev/null +++ b/lib/Locale/gettext_dumb.pm @@ -0,0 +1,354 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Pure Perl implementation of Uniforum message translation. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::gettext_dumb; + +use Locale::gettext_pp; + +use vars qw (%EXPORT_TAGS @EXPORT_OK @ISA $VERSION); + +%EXPORT_TAGS = (locale_h => [ qw (gettext + dgettext + dcgettext + ngettext + dngettext + dcngettext + pgettext + dpgettext + dcpgettext + npgettext + dnpgettext + dcnpgettext + textdomain + bindtextdomain + bind_textdomain_codeset + )], + libintl_h => [ qw (LC_CTYPE + LC_NUMERIC + LC_TIME + LC_COLLATE + LC_MONETARY + LC_MESSAGES + LC_ALL)], + ); + +@EXPORT_OK = qw (gettext + dgettext + dcgettext + ngettext + dngettext + dcngettext + pgettext + dpgettext + dcpgettext + npgettext + dnpgettext + dcnpgettext + textdomain + bindtextdomain + bind_textdomain_codeset + nl_putenv + setlocale + LC_CTYPE + LC_NUMERIC + LC_TIME + LC_COLLATE + LC_MONETARY + LC_MESSAGES + LC_ALL); + +@ISA = qw (Exporter); + +*Locale::gettext_dumb::textdomain = \&Locale::gettext_pp::textdomain; +*Locale::gettext_dumb::bindtextdomain = \&Locale::gettext_pp::bindtextdomain; +*Locale::gettext_dumb::bind_textdomain_codeset = + \&Locale::gettext_pp::bind_textdomain_codeset; + +*Locale::gettext_dumb::nl_putenv = \&Locale::gettext_pp::nl_putenv; + +*Locale::gettext_dumb::LC_CTYPE = \&Locale::gettext_pp::LC_CTYPE; +*Locale::gettext_dumb::LC_NUMERIC = \&Locale::gettext_pp::LC_NUMERIC; +*Locale::gettext_dumb::LC_TIME= \&Locale::gettext_pp::LC_TIME; +*Locale::gettext_dumb::LC_COLLATE = \&Locale::gettext_pp::LC_COLLATE; +*Locale::gettext_dumb::LC_MONETARY = \&Locale::gettext_pp::LC_MONETARY; +*Locale::gettext_dumb::LC_MESSAGES = \&Locale::gettext_pp::LC_MESSAGES; +*Locale::gettext_dumb::LC_ALL = \&Locale::gettext_pp::LC_ALL; + + +sub gettext ($) { + my ($msgid) = @_; + + return dcnpgettext ('', undef, $msgid, undef, undef, undef); +} + +sub dgettext ($$) { + my ($domainname, $msgid) = @_; + + return dcnpgettext ($domainname, undef, $msgid, undef, undef, undef); +} + +sub dcgettext ($$$) { + my ($domainname, $msgid, $category) = @_; + + return dcnpgettext ($domainname, undef, $msgid, undef, undef, undef); +} + +sub ngettext ($$$) { + my ($msgid, $msgid_plural, $n) = @_; + + return dcnpgettext ('', undef, $msgid, $msgid_plural, $n, undef); +} + +sub dngettext ($$$$) { + my ($domainname, $msgid, $msgid_plural, $n) = @_; + + return dcnpgettext ($domainname, undef, $msgid, $msgid_plural, $n, undef); +} + +sub dcngettext ($$$$$) { + my ($domainname, $msgid, $msgid_plural, $n, $category) = @_; + + return dcnpgettext ($domainname, undef, $msgid, $msgid_plural, $n, , + $category); +} + +sub pgettext ($$) { + my ($msgctxt, $msgid) = @_; + + return dcnpgettext ('', $msgctxt, $msgid, undef, undef, undef); +} + +sub dpgettext ($$$) { + my ($domainname, $msgctxt, $msgid) = @_; + + return dcnpgettext ($domainname, $msgctxt, $msgid, undef, undef, undef); +} + +sub dcpgettext($$$$) { + my ($domainname, $msgctxt, $msgid, $category) = @_; + + return dcnpgettext ($domainname, $msgctxt, $msgid, undef, undef, undef); +} + +sub npgettext ($$$$) { + my ($msgctxt, $msgid, $msgid_plural, $n) = @_; + + return dcnpgettext ('', $msgctxt, $msgid, $msgid_plural, $n, undef); +} + +sub dnpgettext ($$$$$) { + my ($domainname, $msgctxt, $msgid, $msgid_plural, $n) = @_; + + return dcnpgettext ($domainname, $msgctxt, $msgid, $msgid_plural, $n, undef); +} + +sub dcnpgettext ($$$$$$) { + my ($domainname, $msgctxt, $msgid, $msgid_plural, $n, $category) = @_; + + my $locale; + + if (exists $ENV{LANGUAGE} && length $ENV{LANGUAGE}) { + $locale = $ENV{LANGUAGE}; + $locale =~ s/:.*//s; + } elsif (exists $ENV{LC_ALL} && length $ENV{LC_ALL}) { + $locale = $ENV{LC_ALL}; + } elsif (exists $ENV{LANG} && length $ENV{LANG}) { + $locale = $ENV{LANG}; + } elsif (exists $ENV{LC_MESSAGES} && length $ENV{LC_MESSAGES}) { + $locale = $ENV{LC_MESSAGES}; + } else { + $locale = 'C'; + } + + return Locale::gettext_pp::_dcnpgettext_impl ($domainname, $msgctxt, + $msgid, $msgid_plural, $n, + $category, $locale); +} + +sub setlocale($;$) { + &POSIX::setlocale; +} + +1; + +__END__ + +=head1 NAME + +Locale::gettext_dumb - Locale unaware Implementation of Uniforum Message Translation + +=head1 SYNOPSIS + + use Locale::gettext_dumb qw(:locale_h :libintl_h); + + # Normally, you will not want to include this module directly but this way: + use Locale::Messages; + + my $selected = Locale::Messages->select_package ('gettext_dumb'); + + gettext $msgid; + dgettext $domainname, $msgid; + dcgettext $domainname, $msgid, LC_MESSAGES; + ngettext $msgid, $msgid_plural, $count; + dngettext $domainname, $msgid, $msgid_plural, $count; + dcngettext $domainname, $msgid, $msgid_plural, $count, LC_MESSAGES; + pgettext $msgctxt, $msgid; + dpgettext $domainname, $msgctxt, $msgid; + dcpgettext $domainname, $msgctxt, $msgid, LC_MESSAGES; + npgettext $msgctxt, $msgid, $msgid_plural, $count; + dnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count; + dcnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count, LC_MESSAGES; + textdomain $domainname; + bindtextdomain $domainname, $directory; + bind_textdomain_codeset $domainname, $encoding; + my $category = LC_CTYPE; + my $category = LC_NUMERIC; + my $category = LC_TIME; + my $category = LC_COLLATE; + my $category = LC_MONETARY; + my $category = LC_MESSAGES; + my $category = LC_ALL; + +=head1 DESCRIPTION + +B This module is experimental. It may not work as described! + +The module B does exactly the same as +Locale::gettext_xs(3pm) or Locale::gettext_pp(3pm). + +While both other modules use POSIX::setlocale() to determine the currently +selected locale, this backend only checks the environment variables +LANGUAGE, LANG, LC_ALL, LC_MESSAGES (in that order), when it tries to locate +a message catalog (a .mo file). + +This class was introduced in libintl-perl 1.22. + +=head1 USAGE + +This module should not be used for desktop software or scripts run locally. +Why? If you use a message catalog for example in Danish in UTF-8 (da_DA.UTF8) +but the system locale is set to Russian with KOI8-R (ru_RU.KOI8-R) you +may produce invalid output, either invalid multi-byte sequences or invalid +text, depending on how you look at it. + +That will happen, when you mix output from B with +locale-dependent output from the operating system like the contents of +the variable "$!", date and time formatting functions (localtime(), +gmtime(), POSIX::strftime() etc.), number formatting with printf() and +friends, and so on. + +A typical usage scenario looks like this: + +You have a server application (for example a web application) that is supposed +to display a fixed set of messages in many languages. If you want to do this +with Locale::gettext_xs(3pm) or Locale::gettext_pp(3pm), you have to install +the locale data for all of those languages. Otherwise, translating the +messages will not work. + +With Locale::gettext_dumb(3pm) you can relax these requirements, and display +messages for all languages that you have mo files for. + +On the other hand, you will soon reach limits with this approach. Almost +any application requires more than bare translation of messages for +localisation. You want to formatted dates and times, you want to display +numbers in the correct formatting for the selected languages, and you may +want to display system error messages ("$!"). + +In practice, Locale::gettext_dumb(3pm) is still useful in these scenarios. +Your users will have to live with the fact that the presented output is +in different languages resp. for different locales, when "their" locale +is not installed on your system. + +More dangerous is mixing output in different character sets but that can +be easily avoided. Simply make sure that B uses +UTF-8 (for example by setting the environment variable OUTPUT_CHARSET or +by calling bind_textdomain_codeset()) and make sure that the system locale +also uses UTF-8, for example "en_US.UTF8". If that fails, switch to a +locale that uses a subset of UTF-8. In practice that will be US-ASCII, the +character set used by the default locale "C" resp. "POSIX". + +Your application will then to a certain extent mix output for different +localisations resp. languages. But this is completely under your control. + +=head1 EXAMPLE + +See above! Normally you should not use this module! However, let us assume +you have read the warnings. In a web application you would do something +like this: + + use Locale::TextDomain qw (com.example.yourapp); + use Locale::Messages qw (nl_putenv LC_ALL bindtextdomain + bind_textdomain_codeset); + use Locale::Util qw (web_set_locale); + use POSIX qw (setlocale); + + # First try to switch to the locale requested by the user. If you + # know it you can try to pass it to setlocale like this: + # + # my $hardcoded_locale = 'fr_FR.UTF-8'; + # my $success = POSIX::setlocale (LC_ALL, $hardcoded_locale); + # + # However, we try to let libintl-perl do a better job for us: + my $success = web_set_locale $ENV{HTTP_ACCEPT_LANGUAGE}, + $ENV{HTTP_ACCEPT_CHARSET}; + # Note: If your application forces the use of UTF-8 for its output + # you should pass 'UTF-8' as the second argument to web_set_locale + # instead of $ENV{HTTP_ACCEPT_CHARSET}. + + if (!$success) { + # Did not work. Switch to the dumb interface of + # Locale::Messages. + Locale::Messages->select_package ('gettext_dumb'); + + # And try to switch to a default locale: + if (!setlocale (LC_ALL, 'en_US.UTF-8')) { + # Still no luck. Enforce at least US-ASCII: + setlocale (LC_ALL, 'C'); + } + bind_textdomain_codeset 'com.example.yourapp', 'utf-8'; + } + +If your application forces the usage of UTF-8 you should ignore the environment +variable + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::TextDomain(3pm), Locale::Messages(3pm), Encode(3pm), +perllocale(3pm), POSIX(3pm), perl(1), gettext(1), gettext(3) + +=cut + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +tab-width: 4 +End: diff --git a/lib/Locale/gettext_pp.pm b/lib/Locale/gettext_pp.pm new file mode 100755 index 0000000..236b3f5 --- /dev/null +++ b/lib/Locale/gettext_pp.pm @@ -0,0 +1,1093 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Pure Perl implementation of Uniforum message translation. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +package Locale::gettext_pp; + +use strict; + +require 5.004; + +use vars qw ($__gettext_pp_default_dir + $__gettext_pp_textdomain + $__gettext_pp_domain_bindings + $__gettext_pp_domain_codeset_bindings + $__gettext_pp_domains + $__gettext_pp_recoders + $__gettext_pp_unavailable_dirs + $__gettext_pp_domain_cache + $__gettext_pp_alias_cache + $__gettext_pp_context_glue); + +use locale; +use File::Spec; + +BEGIN { + $__gettext_pp_textdomain = 'messages'; + $__gettext_pp_domain_bindings = {}; + $__gettext_pp_domain_codeset_bindings = {}; + $__gettext_pp_domains = {}; + $__gettext_pp_recoders = {}; + $__gettext_pp_unavailable_dirs = {}; + $__gettext_pp_domain_cache = {}; + $__gettext_pp_alias_cache = {}; + # The separator between msgctxt and msgid in a .mo file. */ + $__gettext_pp_context_glue = "\004"; + + $__gettext_pp_default_dir = ''; + + for my $dir (qw (/usr/share/locale /usr/local/share/locale)) { + if (-d $dir) { + $__gettext_pp_default_dir = $dir; + last; + } + } +} + +BEGIN { + require POSIX; + require Exporter; + use IO::Handle; + require Locale::Recode; + + local $@; + my ($has_messages, $five_ok); + + $has_messages = eval '&POSIX::LC_MESSAGES'; + + unless (defined $has_messages && length $has_messages) { + $five_ok = ! grep {my $x = eval "&POSIX::$_" || 0; $x eq '5';} + qw (LC_CTYPE + LC_NUMERIC + LC_TIME + LC_COLLATE + LC_MONETARY + LC_ALL); + if ($five_ok) { + $five_ok = POSIX::setlocale (5, ''); + } + } + + if (defined $has_messages && length $has_messages) { +eval <<'EOF'; +sub LC_MESSAGES() +{ + local $!; # Do not clobber errno! + + return &POSIX::LC_MESSAGES; +} +EOF + } elsif ($five_ok) { +eval <<'EOF'; +sub LC_MESSAGES() +{ + local $!; # Do not clobber errno! + + # Hack: POSIX.pm deems LC_MESSAGES an invalid macro until + # Perl 5.8.0. However, on LC_MESSAGES should be 5 ... + return 5; +} +EOF + } else { +eval <<'EOF'; +sub LC_MESSAGES() +{ + local $!; # Do not clobber errno! + + # This fallback value is widely used, + # when LC_MESSAGES is not available. + return 1729; +} +EOF + } +} + +use vars qw (%EXPORT_TAGS @EXPORT_OK @ISA $VERSION); + +%EXPORT_TAGS = (locale_h => [ qw ( + gettext + dgettext + dcgettext + ngettext + dngettext + dcngettext + pgettext + dpgettext + dcpgettext + npgettext + dnpgettext + dcnpgettext + textdomain + bindtextdomain + bind_textdomain_codeset + ) + ], + libintl_h => [ qw (LC_CTYPE + LC_NUMERIC + LC_TIME + LC_COLLATE + LC_MONETARY + LC_MESSAGES + LC_ALL) + ], + ); + +@EXPORT_OK = qw (gettext + dgettext + dcgettext + ngettext + dngettext + dcngettext + pgettext + dpgettext + dcpgettext + npgettext + dnpgettext + dcnpgettext + textdomain + bindtextdomain + bind_textdomain_codeset + nl_putenv + setlocale + LC_CTYPE + LC_NUMERIC + LC_TIME + LC_COLLATE + LC_MONETARY + LC_MESSAGES + LC_ALL); +@ISA = qw (Exporter); + +my $has_nl_langinfo; + +sub __load_catalog; +sub __load_domain; +sub __locale_category; +sub __untaint_plural_header; +sub __compile_plural_function; + +sub LC_NUMERIC() +{ + &POSIX::LC_NUMERIC; +} + +sub LC_CTYPE() +{ + &POSIX::LC_CTYPE; +} + +sub LC_TIME() +{ + &POSIX::LC_TIME; +} + +sub LC_COLLATE() +{ + &POSIX::LC_COLLATE; +} + +sub LC_MONETARY() +{ + &POSIX::LC_MONETARY; +} + +sub LC_ALL() +{ + &POSIX::LC_ALL; +} + +sub textdomain(;$) +{ + my $new_domain = shift; + + $__gettext_pp_textdomain = $new_domain if defined $new_domain && + length $new_domain; + + return $__gettext_pp_textdomain; +} + +sub bindtextdomain($;$) +{ + my ($domain, $directory) = @_; + + my $retval; + if (defined $domain && length $domain) { + if (defined $directory && length $directory) { + $retval = $__gettext_pp_domain_bindings->{$domain} + = $directory; + } elsif (exists $__gettext_pp_domain_bindings->{$domain}) { + $retval = $__gettext_pp_domain_bindings->{$domain}; + } else { + $retval = $__gettext_pp_default_dir; + } + $retval = '/usr/share/locale' unless defined $retval && + length $retval; + return $retval; + } else { + return; + } +} + +sub bind_textdomain_codeset($;$) +{ + my ($domain, $codeset) = @_; + + if (defined $domain && length $domain) { + if (defined $codeset && length $codeset) { + return $__gettext_pp_domain_codeset_bindings->{$domain} = $codeset; + } elsif (exists $__gettext_pp_domain_codeset_bindings->{$domain}) { + return $__gettext_pp_domain_codeset_bindings->{$domain}; + } + } + + return; +} + +sub gettext($) +{ + my ($msgid) = @_; + + return dcnpgettext ('', undef, $msgid, undef, undef, undef); +} + +sub dgettext($$) +{ + my ($domainname, $msgid) = @_; + + return dcnpgettext ($domainname, undef, $msgid, undef, undef, undef); +} + +sub dcgettext($$$) +{ + my ($domainname, $msgid, $category) = @_; + + return dcnpgettext ($domainname, undef, $msgid, undef, undef, undef); +} + +sub ngettext($$$) +{ + my ($msgid, $msgid_plural, $n) = @_; + + return dcnpgettext ('', undef, $msgid, $msgid_plural, $n, undef); +} + +sub dngettext($$$$) +{ + my ($domainname, $msgid, $msgid_plural, $n) = @_; + + return dcnpgettext ($domainname, undef, $msgid, $msgid_plural, $n, undef); +} + +sub dcngettext($$$$$) +{ + my ($domainname, $msgid, $msgid_plural, $n, $category) = @_; + + return dcnpgettext ($domainname, undef, $msgid, $msgid_plural, $n, , $category); +} + + +sub pgettext($$) +{ + my ($msgctxt, $msgid) = @_; + + return dcnpgettext ('', $msgctxt, $msgid, undef, undef, undef); +} + +sub dpgettext($$$) +{ + my ($domainname, $msgctxt, $msgid) = @_; + + return dcnpgettext ($domainname, $msgctxt, $msgid, undef, undef, undef); +} + +sub dcpgettext($$$$) +{ + my ($domainname, $msgctxt, $msgid, $category) = @_; + + return dcnpgettext ($domainname, $msgctxt, $msgid, undef, undef, undef); +} + +sub npgettext($$$$) +{ + my ($msgctxt, $msgid, $msgid_plural, $n) = @_; + + return dcnpgettext ('', $msgctxt, $msgid, $msgid_plural, $n, undef); +} + +sub dnpgettext($$$$$) +{ + my ($domainname, $msgctxt, $msgid, $msgid_plural, $n) = @_; + + return dcnpgettext ($domainname, $msgctxt, $msgid, $msgid_plural, $n, undef); +} + +# This is the actual implementation of dncpgettext. It is also used by the +# corresponding function in Locale::gettext_dumb. +sub _dcnpgettext_impl { + my ($domainname, $msgctxt, $msgid, $msgid_plural, $n, $category, + $locale) = @_; + + return unless defined $msgid; + + my $plural = defined $msgid_plural; + my $msg_ctxt_id = defined $msgctxt ? join($__gettext_pp_context_glue, ($msgctxt, $msgid)) : $msgid; + + local $!; # Do not clobber errno! + + # This is also done in __load_domain but we need a proper value. + $domainname = $__gettext_pp_textdomain + unless defined $domainname && length $domainname; + + # Category is always LC_MESSAGES (other categories are ignored). + my $category_name = 'LC_MESSAGES'; + $category = LC_MESSAGES; + + my $domains = __load_domain ($domainname, $category, $category_name, + $locale); + + my @trans = (); + my $domain; + my $found; + foreach my $this_domain (@$domains) { + if ($this_domain && defined $this_domain->{messages}->{$msg_ctxt_id}) { + @trans = @{$this_domain->{messages}->{$msg_ctxt_id}}; + shift @trans; + $domain = $this_domain; + $found = 1; + last; + } + } + @trans = ($msgid, $msgid_plural) unless @trans; + + my $trans = $trans[0]; + if ($plural) { + if ($domain) { + my $nplurals = 0; + ($nplurals, $plural) = &{$domain->{plural_func}} ($n); + $plural = 0 unless defined $plural; + $nplurals = 0 unless defined $nplurals; + $plural = 0 if $nplurals <= $plural; + } else { + $plural = $n != 1 || 0; + } + + $trans = $trans[$plural] if defined $trans[$plural]; + } + + if ($found && defined $domain->{po_header}->{charset}) { + my $input_codeset = $domain->{po_header}->{charset}; + # Convert into output charset. + my $output_codeset = $__gettext_pp_domain_codeset_bindings->{$domainname}; + + $output_codeset = $ENV{OUTPUT_CHARSET} unless defined $output_codeset; + $output_codeset = __get_codeset ($category, $category_name, + $domain->{locale_id}) + unless defined $output_codeset; + + unless (defined $output_codeset) { + # Still no point. + my $lc_ctype = __locale_category (POSIX::LC_CTYPE(), + 'LC_CTYPE'); + $output_codeset = $1 + if $lc_ctype =~ /^[a-z]{2}(?:_[A-Z]{2})?\.([^@]+)/; + } + + # No point. :-( + $output_codeset = $domain->{po_header}->{charset} + unless defined $output_codeset; + + if (exists $__gettext_pp_domain_cache->{$output_codeset}) { + $output_codeset = $__gettext_pp_domain_cache->{$output_codeset}; + } else { + $output_codeset = 'utf-8' if lc $output_codeset eq 'utf8'; + $output_codeset = + $__gettext_pp_domain_cache->{$output_codeset} = + Locale::Recode->resolveAlias ($output_codeset); + } + + if (defined $output_codeset && + $output_codeset ne $domain->{po_header}->{charset}) { + # We have to convert. + my $recoder; + + if (exists + $__gettext_pp_recoders->{$input_codeset}->{$output_codeset}) { + $recoder = $__gettext_pp_recoders->{$input_codeset}->{$output_codeset}; + } else { + $recoder = + $__gettext_pp_recoders->{$input_codeset}->{$output_codeset} = + Locale::Recode->new (from => $input_codeset, + to => $output_codeset, + ); + } + + $recoder->recode ($trans); + } + } + + return $trans; +} + +sub dcnpgettext ($$$$$$) { + return &_dcnpgettext_impl; +} + +sub nl_putenv ($) +{ + my ($envspec) = @_; + return unless defined $envspec; + return unless length $envspec; + return if substr ($envspec, 0, 1) eq '='; + + my ($var, $value) = split /=/, $envspec, 2; + + # In Perl we *could* set empty environment variables even under + # MS-DOS, but for compatibility reasons, we implement the + # brain-damaged behavior of the Microsoft putenv(). + if ($^O eq 'MSWin32') { + $value = '' unless defined $value; + if (length $value) { + $ENV{$var} = $value; + } else { + delete $ENV{$var}; + } + } else { + if (defined $value) { + $ENV{$var} = $value; + } else { + delete $ENV{$var}; + } + } + + return 1; +} + +sub setlocale($;$) { + require POSIX; + &POSIX::setlocale; +} + +sub __load_domain +{ + my ($domainname, $category, $category_name, $locale) = @_; + + # If no locale was selected for the requested locale category, + # l10n is disabled completely. This matches the behavior of GNU + # gettext. + if ($category != LC_MESSAGES) { + # Not supported. + return []; + } + + if (!defined $locale && $category != 1729) { + $locale = POSIX::setlocale ($category); + if (!defined $locale || 'C' eq $locale || 'POSIX' eq $locale) { + return []; + } + } + + $domainname = $__gettext_pp_textdomain + unless defined $domainname && length $domainname; + + my $dir = bindtextdomain ($domainname, ''); + $dir = $__gettext_pp_default_dir unless defined $dir && length $dir; + return [] unless defined $dir && length $dir; + + my @locales; + my $cache_key; + + if (defined $ENV{LANGUAGE} && length $ENV{LANGUAGE}) { + @locales = split /:/, $ENV{LANGUAGE}; + $cache_key = $ENV{LANGUAGE}; + } elsif (!defined $locale) { + # The system does not have LC_MESSAGES. Guess the value. + @locales = $cache_key = __locale_category ($category, + $category_name); + } else { + @locales = $cache_key = $locale; + } + + # Have we looked that one up already? + my $domains = $__gettext_pp_domain_cache->{$dir}->{$cache_key}->{$category_name}->{$domainname}; + return $domains if defined $domains; + return [] unless @locales; + + my @dirs = ($dir); + my @tries = (@locales); + my %locale_lookup = map { $_ => $_ } @tries; + + foreach my $locale (@locales) { + if ($locale =~ /^([a-z][a-z]) + (?:(_[A-Z][A-Z])? + (\.[-_A-Za-z0-9]+)? + )? + (\@[-_A-Za-z0-9]+)?$/x) { + + if (defined $3) { + defined $2 ? + push @tries, $1 . $2 . $3 : push @tries, $1 . $3; + } + if (defined $2) { + push @tries, $1 . $2; + $locale_lookup{$1 . $2} = $locale; + } + if (defined $1) { + push @tries, $1 if defined $1; + $locale_lookup{$1} = $locale; + } + } + } + push @dirs, $__gettext_pp_default_dir + if $__gettext_pp_default_dir && $dir ne $__gettext_pp_default_dir; + + my %seen = (); + foreach my $basedir (@dirs) { + foreach my $try (@tries) { + my $fulldir = "$basedir/$try/$category_name"; + + next if $seen{$fulldir}++; + + # If the cache for unavailable directories is removed, + # the three lines below should be replaced by: + # 'next unless -d $fulldir;' + next if $__gettext_pp_unavailable_dirs->{$fulldir}; + ++$__gettext_pp_unavailable_dirs->{$fulldir} and next + unless -d $fulldir; + my $filename = File::Spec->catfile ($fulldir, + "$domainname.mo"); + my $domain = __load_catalog ($filename, $try); + next unless $domain; + + $domain->{locale_id} = $locale_lookup{$try}; + push @$domains, $domain; + } + } + $__gettext_pp_domain_cache->{$dir} + ->{$cache_key} + ->{$category_name} + ->{$domainname} = $domains; + + $domains = [] unless defined $domains; + + return $domains; +} + +sub __load_catalog +{ + my ($filename, $locale) = @_; + + # Alternatively we could check the filename for evil characters ... + # (Important for CGIs). + return unless -f $filename && -r $filename; + + local $/; + local *HANDLE; + + open HANDLE, "<$filename" + or return; + binmode HANDLE; + my $raw = ; + close HANDLE; + + # Corrupted? + return if ! defined $raw || length $raw < 28; + + my $filesize = length $raw; + + # Read the magic number in order to determine the byte order. + my $domain = {}; + my $unpack = 'N'; + $domain->{potter} = unpack $unpack, substr $raw, 0, 4; + + if ($domain->{potter} == 0xde120495) { + $unpack = 'V'; + } elsif ($domain->{potter} != 0x950412de) { + return; + } + my $domain_unpack = $unpack x 6; + + my ($revision, $num_strings, $msgids_off, $msgstrs_off, + $hash_size, $hash_off) = + unpack (($unpack x 6), substr $raw, 4, 24); + + my $major = $revision >> 16; + return if $major != 0; # Invalid revision number. + + $domain->{revision} = $revision; + $domain->{num_strings} = $num_strings; + $domain->{msgids_off} = $msgids_off; + $domain->{msgstrs_off} = $msgstrs_off; + $domain->{hash_size} = $hash_size; + $domain->{hash_off} = $hash_off; + + return if $msgids_off + 4 * $num_strings > $filesize; + return if $msgstrs_off + 4 * $num_strings > $filesize; + + my @orig_tab = unpack (($unpack x (2 * $num_strings)), + substr $raw, $msgids_off, 8 * $num_strings); + my @trans_tab = unpack (($unpack x (2 * $num_strings)), + substr $raw, $msgstrs_off, 8 * $num_strings); + + my $messages = {}; + + for (my $count = 0; $count < 2 * $num_strings; $count += 2) { + my $orig_length = $orig_tab[$count]; + my $orig_offset = $orig_tab[$count + 1]; + my $trans_length = $trans_tab[$count]; + my $trans_offset = $trans_tab[$count + 1]; + + return if $orig_offset + $orig_length > $filesize; + return if $trans_offset + $trans_length > $filesize; + + my @origs = split /\000/, substr $raw, $orig_offset, $orig_length; + my @trans = split /\000/, substr $raw, $trans_offset, $trans_length; + + # The singular is the key, the plural plus all translations is the + # value. + my $msgid = $origs[0]; + $msgid = '' unless defined $msgid && length $msgid; + my $msgstr = [ $origs[1], @trans ]; + $messages->{$msgid} = $msgstr; + } + + $domain->{messages} = $messages; + + # Try to find po header information. + my $po_header = {}; + my $null_entry = $messages->{''}->[1]; + if ($null_entry) { + my @lines = split /\n/, $null_entry; + foreach my $line (@lines) { + my ($key, $value) = split /:/, $line, 2; + $key =~ s/-/_/g; + $po_header->{lc $key} = $value; + } + } + $domain->{po_header} = $po_header; + + if (exists $domain->{po_header}->{content_type}) { + my $content_type = $domain->{po_header}->{content_type}; + if ($content_type =~ s/.*=//) { + $domain->{po_header}->{charset} = $content_type; + } + } + + my $code = $domain->{po_header}->{plural_forms} || ''; + + # Whitespace, locale-independent. + my $s = '[ \t\r\n\013\014]'; + + # Untaint the plural header. + # Keep line breaks as is (Perl 5_005 compatibility). + $code = $domain->{po_header}->{plural_forms} + = __untaint_plural_header $code; + + $domain->{plural_func} = __compile_plural_function $code; + + unless (defined $domain->{po_header}->{charset} + && length $domain->{po_header}->{charset} + && $locale =~ /^(?:[a-z][a-z]) + (?:(?:_[A-Z][A-Z])? + (\.[-_A-Za-z0-9]+)? + )? + (?:\@[-_A-Za-z0-9]+)?$/x) { + $domain->{po_header}->{charset} = $1; + } + + if (defined $domain->{po_header}->{charset}) { + $domain->{po_header}->{charset} = + Locale::Recode->resolveAlias ($domain->{po_header}->{charset}); + } + + return $domain; +} + +sub __locale_category +{ + my ($category, $category_name) = @_; + + local $@; + my $value = eval {POSIX::setlocale ($category)}; + + # We support only XPG syntax, i. e. + # language[_territory[.codeset]][@modifier]. + undef $value unless (defined $value && + length $value && + $value =~ /^[a-z][a-z] + (?:_[A-Z][A-Z] + (?:\.[-_A-Za-z0-9]+)? + )? + (?:\@[-_A-Za-z0-9]+)?$/x); + + unless ($value) { + $value = $ENV{LC_ALL}; + $value = $ENV{$category_name} unless defined $value && length $value; + $value = $ENV{LANG} unless defined $value && length $value; + return 'C' unless defined $value && length $value; + } + + return $value if $value ne 'C' && $value ne 'POSIX'; +} + +sub __get_codeset +{ + my ($category, $category_name, $locale_id) = @_; + + local $@; + unless (defined $has_nl_langinfo) { + eval { + require I18N::Langinfo; + }; + $has_nl_langinfo = !$@; + } + + if ($has_nl_langinfo) { + # Try to set the locale via the specified id. + my $saved_locale = eval { POSIX::setlocale (LC_ALL) }; + my $had_lc_all = exists $ENV{LC_ALL}; + my $saved_lc_all = $ENV{LC_ALL} if $had_lc_all; + + # Now try to set the locale via the environment. There is no + # point in calling the langinfo routines if this fails. + $ENV{LC_ALL} = $locale_id; + my $codeset; + my $lc_all = eval { POSIX::setlocale (LC_ALL, $locale_id); }; + $codeset = I18N::Langinfo::langinfo (I18N::Langinfo::CODESET()) + if defined $lc_all; + + # Restore environment. + if ($saved_locale) { + eval { POSIX::setlocale (LC_ALL, $saved_locale); } + } + if ($had_lc_all) { + $ENV{LC_ALL} = $saved_lc_all if $had_lc_all; + } else { + delete $ENV{LC_ALL}; + } + return $codeset; + } + + return; +} + +sub __untaint_plural_header { + my ($code) = @_; + + # Whitespace, locale-independent. + my $s = '[ \t\r\n\013\014]'; + + if ($code =~ m{^($s* + nplurals$s*=$s*[0-9]+ + $s*;$s* + plural$s*=$s*(?:$s|[-\?\|\&=!<>+*/\%:;a-zA-Z0-9_\(\)])+ + )}xms) { + return $1; + } + + return ''; +} + +sub __compile_plural_function { + my ($code) = @_; + + # The leading and trailing space is necessary to be able to match + # against word boundaries. + my $plural_func; + + if (length $code) { + my $code = ' ' . $code . ' '; + $code =~ + s/(?<=[^_a-zA-Z0-9])[_a-z][_A-Za-z0-9]*(?=[^_a-zA-Z0-9])/\$$&/gs; + + $code = "sub { my \$n = shift || 0; + my (\$plural, \$nplurals); + $code; + return (\$nplurals, \$plural ? \$plural : 0); }"; + + # Now try to evaluate the code. There is no need to run the code in + # a Safe compartment. The above substitutions should have destroyed + # all evil code. Corrections are welcome! + #warn $code; + $plural_func = eval $code; + #warn $@ if $@; + undef $plural_func if $@; + } + + # Default is Germanic plural (which is incorrect for French). + $plural_func = eval "sub { (2, 1 != shift || 0) }" unless $plural_func; + + return $plural_func; +} + +1; + +__END__ + +=head1 NAME + +Locale::gettext_pp - Pure Perl Implementation of Uniforum Message Translation + +=head1 SYNOPSIS + + use Locale::gettext_pp qw(:locale_h :libintl_h); + + gettext $msgid; + dgettext $domainname, $msgid; + dcgettext $domainname, $msgid, LC_MESSAGES; + ngettext $msgid, $msgid_plural, $count; + dngettext $domainname, $msgid, $msgid_plural, $count; + dcngettext $domainname, $msgid, $msgid_plural, $count, LC_MESSAGES; + pgettext $msgctxt, $msgid; + dpgettext $domainname, $msgctxt, $msgid; + dcpgettext $domainname, $msgctxt, $msgid, LC_MESSAGES; + npgettext $msgctxt, $msgid, $msgid_plural, $count; + dnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count; + dcnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count, LC_MESSAGES; + textdomain $domainname; + bindtextdomain $domainname, $directory; + bind_textdomain_codeset $domainname, $encoding; + my $category = LC_CTYPE; + my $category = LC_NUMERIC; + my $category = LC_TIME; + my $category = LC_COLLATE; + my $category = LC_MONETARY; + my $category = LC_MESSAGES; + my $category = LC_ALL; + +=head1 DESCRIPTION + +The module B is the low-level interface to +message translation according to the Uniforum approach that is +for example used in GNU gettext and Sun's Solaris. + +Normally you should not use this module directly, but the high +level interface Locale::TextDomain(3) that provides a much simpler +interface. This description is therefore deliberately kept +brief. Please refer to the GNU gettext documentation available at +L for in-depth and background +information on the topic. + +=head1 FUNCTIONS + +The module exports by default nothing. Every function has to be +imported explicitely or via an export tag (L<"EXPORT TAGS">). + +=over 4 + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +See L. + +=item B + +=item B + +See L. + +=item B + +See L. + +=back + +=head1 CONSTANTS + +You can (maybe) get the same constants from POSIX(3); see there for +a detailed description + +=over 4 + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +See L for more information. + +=back + +=head1 EXPORT TAGS + +This module does not export anything unless explicitely requested. +You can import groups of functions via two tags: + +=over 4 + +=item B + +Imports the functions that are normally defined in the C include +file F: + +=over 8 + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +Introduced with libintl-perl 1.17. + +=item B + +Introduced with libintl-perl 1.17. + +=item B + +Introduced with libintl-perl 1.17. + +=item B + +Introduced with libintl-perl 1.17. + +=item B + +Introduced with libintl-perl 1.17. + +=item B + +Introduced with libintl-perl 1.17. + +=item B + +=item B + +=item B + +=back + +=item B + +Imports the locale category constants: + +=over 8 + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=back + +=back + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +=head1 SEE ALSO + +Locale::TextDomain(3pm), Locale::Messages(3pm), Encode(3pm), +perllocale(3pm), POSIX(3pm), perl(1), gettext(1), gettext(3) + +=cut + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +tab-width: 4 +End: + +=cut diff --git a/lib/Locale/gettext_xs.pod b/lib/Locale/gettext_xs.pod new file mode 100755 index 0000000..1904c4d --- /dev/null +++ b/lib/Locale/gettext_xs.pod @@ -0,0 +1,106 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# Pure Perl implementation of Uniforum message translation. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. + +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, +# USA. + +=head1 NAME + +Locale::gettext_xs - XS Implementation of Uniforum Message Translation + +=head1 SYNOPSIS + + use gettext_xs qw(:locale_h :libintl_h); + + gettext $msgid; + dgettext $domainname, $msgid; + dcgettext $domainname, $msgid, LC_MESSAGES; + ngettext $msgid, $msgid_plural, $count; + dngettext $domainname, $msgid, $msgid_plural, $count; + dcngettext $domainname, $msgid, $msgid_plural, $count, LC_MESSAGES; + pgettext $msgctxt, $msgid; + dpgettext $domainname, $msgctxt, $msgid; + dcpgettext $domainname, $msgctxt, $msgid, LC_MESSAGES; + npgettext $msgctxt, $msgid, $msgid_plural, $count; + dnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count; + dcnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count, LC_MESSAGES; + textdomain $domainname; + bindtextdomain $domainname, $directory; + bind_textdomain_codeset $domainname, $encoding; + my $category = LC_CTYPE; + my $category = LC_NUMERIC; + my $category = LC_TIME; + my $category = LC_COLLATE; + my $category = LC_MONETARY; + my $category = LC_MESSAGES; + my $category = LC_ALL; + +=head1 DESCRIPTION + +The module B is the low-level interface to +message translation according to the Uniforum approach that is +for example used in GNU gettext and Sun's Solaris. + +The module does not necessarily work on your system. It depends +on the presence of shared libraries that are not always available. +The higher-level modules Locale::TextDomain::(3), resp. +Locale::Messages(3) will fall back to a pure Perl version if +boostrapping B fails. + +The interface of B is mostly identical to the pure +Perl version as described in Locale::gettext_pp(3), see there for details. +Differences are outlined below. + +B is downwards compatible to Locale::gettext(3) +by Phillip Vandry . You can use it as replacement +for Locale::gettext(3). + +Please note that directory names passed to the function bindtextdomain() +are automatically converted from Perl semantics (slash as directory +separator) to local semantics (for example the backslash for MS-DOS). + +=head1 AUTHOR + +Copyright (C) 2002-2017 L +(L), all rights reserved. See the source +code for details!code for details! + +The module is based on the work of Phillip Vandry +in Locale::gettext(3). + +=head1 SEE ALSO + +Locale::TextDomain(3pm), Locale::gettext_pp(3pm), Locale::gettext(3pm), +Locale::Messages(3pm), File::Spec(3), perl(1) + +=cut + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +tab-width: 4 +End: + +=cut diff --git a/lib/Locale/libintlFAQ.pod b/lib/Locale/libintlFAQ.pod new file mode 100644 index 0000000..9d63997 --- /dev/null +++ b/lib/Locale/libintlFAQ.pod @@ -0,0 +1,303 @@ +#! /bin/false + +# vim: set autoindent shiftwidth=4 tabstop=4: + +# High-level interface to Perl i18n. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. + +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, +# USA. + +=head1 NAME + +Locale::TextDomain::FAQ - Frequently asked questions for libintl-perl + +=head1 DESCRIPTION + +This FAQ + +=head1 QUESTIONS AND ANSWERS + +=head2 Why is libintl-perl so big? Why don't you use Encode(3pm) for character +set conversion instead of rolling your own version? + +Encode(3pm) requires at least Perl 5.7.x, whereas libintl-perl needs +to be operational on Perl 5.004. Internally, libintl-perl uses Encode(3pm) +if it is available. + + +=head2 Why do the gettext functions always unset the utf-8 flag on the strings +it returns? + +Because the gettext functions do not know whether the string is encoded +in utf-8 or not. Instead of taking guesses, it rather unsets the flag. + + +=head2 Can I set the utf-8 flag on strings returned by the gettext family of +functions? + +Yes, but it is not recommended. If you absolutely want to do it, +use the function bind_textdomain_filter in Locale::Messages for it. + +The strings returned by gettext and friends are by default encoded in +the preferred charset for the user's locale, but there is no portable +way to find out, whether this is utf-8 or not. That means, you either +have to enforce utf-8 as the output character set (by means of +bind_textdomain_codeset() and/or the environment variable +OUTPUT_CHARSET) and override the user preference, or you run the risk +of marking strings as utf-8 which really aren't utf-8. + +The whole concept behind that utf-8 flag introduced in Perl 5.6 is +seriously broken, and the above described dilemma is a proof for that. +The best thing you can do with that flag is get rid of it, and turn +it off. Your code will benefit from it and become less error prone, +more portable and faster. + + +=head2 Why do non-ASCII characters in my Gtk2 application look messed up? + +The Perl binding of Gtk2 has a design flaw. It expects all UI messages +to be in UTF-8 and it also expects messages to be flagged as utf-8. The +only solution for you is to enforce all your po files to be encoded +in utf-8 (convert them manually, if you need to), and also enforce that +charset in your application, regardless of the user's locale settings. +Assumed that your textdomain is "org.bar.foo", you have to code the +following into your main module or script: + + BEGIN { + bind_textdomain_filter 'org.bar.foo', \&turn_utf_8_on; + bind_textdomain_codeset 'org.bar.foo', 'utf-8'; + } + +See the File GTestRunner.pm of Test::Unit::GTestRunner(3pm) for details. + + +=head2 How do I interface Glade2 UI definitions with libintl-perl? + +Gtk2::GladeXML(3pm) seems to ignore calls to bind_textdomain(). +See the File GTestRunner.pm of Test::Unit::GTestRunner(3pm) for a +possible solution. + + +=head2 Why does Locale::TextDomain use a double underscore? I am used +to a single underscore from C or other languages. + +Function names that consist of exactly one non-alphanumerical character +make the function automatically global in Perl. Besides, in Perl +6 the concatenation operator will be the underscore instead of the +dot. + +=head2 How do I switch languages or force a certain language independently +from user settings read from the environment? + +The simple answer is: + + use POSIX qw (setlocale LC_ALL); + + my $language = 'fr'; + my $country = 'FR'; + my $charset = 'iso-8859-1'; + + setlocale LC_ALL, "${language}_$country.$charset"; + +Sadly enough, this will fail in many cases. The problem is that locale +identifiers are not standardized and are completely system-dependent. Not +only their overall format, but also other details like case-sensitivity. +Some systems are very forgiving about the system - for example normalizing +charset descriptions - others very strict. In order to be reasonably +platform independent, you should try a list of possible locale identifiers +for your desired settings. This is about what I would try for achieving the +above: + + my @tries = qw ( + fr_FR.iso-8859-1 fr_FR.iso8859-1 fr_FR.iso88591 + fr_FR.ISO-8859-1 fr_FR.ISO8859-1 fr_FR.ISO88591 + fr.iso-8859-1 fr.iso8859-1 fr.iso88591 + fr.ISO-8859-1 fr.ISO8859-1 fr.ISO88591 + fr_FR + French_France.iso-8859-1 French_France.iso8859-1 French_France.iso88591 + French_France.ISO-8859-1 French_France.ISO8859-1 French_France.ISO88591 + French.iso-8859-1 French.iso8859-1 French.iso88591 + French.ISO-8859-1 French.ISO8859-1 French.ISO88591 + ); + foreach my $try (@tries) { + last if setlocale LC_ALL, $try; + } + +Set Locale::Util(3pm) for functions that help you with this. + +Alternatively, you can force a certain language by setting the environment +variables LANGUAGE, LANG and OUTPUT_CHARSET, but this is only guaranteed +to work, if you use the pure Perl implementation of gettext (see the +documentation for select_package() in Locale::Messages(3pm)). You would +do the above like this: + + use Locale::Messages qw (nl_putenv); + + # LANGUAGE is a colon separated list of languages. + nl_putenv("LANGUAGE=fr_FR"); + + # If LANGUAGE is set, LANG should be set to the primary language. + # This is not needed for gettext, but for other parts of the system + # it is. + nl_putenv("LANG=fr_FR"); + + # Force an output charset like this: + nl_putenv("OUTPUT_CHARSET=iso-8859-1"); + + setlocale (LC_MESSAGES, 'C'); + +These environment variables are GNU extensions, and they are also +honored by libintl-perl. Still, you should always try to set the +locale with setlocale for the catch-all category LC_ALL. If you miss +to do so, your program's output maybe cluttered, mixing languages +and charsets, if the system runs in a locale that is not compatible +with your own language settings. + +Remember that these environment variables are not guaranteed to +work, if you use an XS version of gettext. In order to force usage +of the pure Perl implementation, do the following: + + Locale::Messages->select_package ('gettext_pp'); + +If you think, this is brain-damaged, you are right, but I cannot help +you. Actually there should be a more flexible API than setlocale, +but at the time of this writing there isn't. Until then, the recommentation +goes like this: + + 1) Try setting LC_ALL with Locale::Util. + 2) If that does not succeed, either give up or ... + 3) Reset LC_MESSAGES to C/POSIX. + 4) Switch to pure Perl for gettext. + 5) Set the environment variables LANGUAGE, LANG, + and OUTPUT_CHARSET to your desired values. + +=head2 What is the advantage of libintl-perl over Locale::Maketext? + +Of course, I can only give my personal opinion as an answer. + +Locale::Maketext claims to fix design flaws in gettext. These alleged +design flaws, however, boil down to one pathological case which always +has a workaround. But both programmers and translators pay this +fix with an unnecessarily complicated interface. + +The paramount advantage of libintl-perl is that it uses an approved +technology and concept. Except for Java(tm) programs, this is the +state-of-the-art concept for localizing Un*x software. Programmers +that have already localized software in C, C++, C#, Python, PHP, +or a number of other languages will feel instantly at home, when +localizing software written in Perl with libintl-perl. The same +holds true for the translators, because the files they deal with +have exactly the same format as those for other programming languages. +They can use the same set of tools, and even the commands they have +to execute are the same. + +With libintl-perl refactoring of the software is painless, even if +you modify, add or delete translatable strings. The gettext tools +are powerful enough to reduce the effort of the translators to the +bare minimum. Maintaining the message catalogs of Locale::Maketext +in larger scale projects, is IMHO unfeasible. + +Editing the message catalogs of Locale::Maketext - they are really +Perl modules - asks too much from most translators, unless +they are programmers. The portable object (po) files used by +libintl-perl have a simple syntax, and there are a bunch of specialized +GUI editors for these files, that facilitate the translation process +and hide most complexity from the user. + +Furthermore, libintl-perl makes it possible to mix programming +languages without a paradigm shift in localization. Without any special +efforts, you can write a localized software that has modules written +in C, modules in Perl, and builds a Gtk user interface with Glade. +All translatable strings end up in one single message catalog. + +Last but not least, the interface used by libintl-perl is plain +simple: Prepend translatable strings with a double underscore, +and you are done in most cases. + +=head2 Why do single-quoted strings not work? + +You probably write something like this: + + print __'Hello'; + +And you get an error message like "Can't find string terminator "'" anywhere +before EOF at ...", or even "Bareword found where operator expected at +... Might be a runaway multi-line '' string starting on". The above line +is (really!) essentially the same as writing: + + print __::Hello'; + +A lesser know feature of Perl is that you can use a single quote ("'") as +the separator in packages instead of the double colon (":"). What the +Perl parser sees in the first example is a valid package name ("__") +followed by the separator ("'"), then another valid package name ("Hello") +followed by a lone single quote. It is therefore not a problem in +libintl-perl but simple wrong Perl syntax. You have to correct alternatives: + + print __ 'Hello'; # Insert a space to disambiguate. + +Or use double-quotes: + + print __"Hello"; + +Thanks to Slavi Agafonkin for pointing me to the solution of this mystery. + +=head2 What options should be used with xgettext? + +More precise, the question should be which '--keyword' and '--flag' +options for xgettext should be used. All other options are completely +dependent on your use-case. + +If you are using L or L for localizing +Perl code, the default keywords and default flags built into xgettext +are correct. + +If you are using L you have to use a long plethora +of command-line options for xgettext. Beginning with libintl-perl 1.28 +you can use the library itself to produce these options: + + perl -MLocale::TextDomain -e 'print Locale::TextDomain->options' + +If you want to disable the use of the built-in default keywords, precede +the output of the above command with '--keyword=""'. That will reset +the keywords for xgettext. + +=head2 Why Isn't There A Function N__x(), N__nx(), or N__px()? + +The sole purpose of these functions would be to set proper flags in the +output of B. You probably thought of something like this: + + xgettext --keyword=N__x --flag=N__x:1:perl-brace-format filename.pl + +First of all, xgettext(1) will I set the flag correctly if the +argument to N__() I like a brace format string. + +Second, you can set any flag you want on the PO entry with a source code +comment: + + # xgettext: no-perl-brace-format + my $msg = N__("Placeholders are enclosed in {curly} braces."); + +When B extracts the string, it will appear like this in the +F<.pot> file: + + #: filename.pl:2304 + #, no-perl-brace-format + msgid "Placeholders are enclosed in {curly} braces." + msgstr "" + +No reason to pollute the namespace with N__x functions. diff --git a/sample/README b/sample/README new file mode 100644 index 0000000..d8ee72c --- /dev/null +++ b/sample/README @@ -0,0 +1,454 @@ +This is a simple, respectively stupid Perl package that shows how the +complete internationalization process for a Perl package *could* be +done. It does not claim to be the smartest or the only possible +solution, but it provides at least a skeleton for real packages. If +libintl-perl should someday become an "established" Perl package, it +would probably be a lot better to seamlessly integrate the process +into ExtUtils::MakeMaker, but for now it's all we have. + +The example focuses on the packaging process, i. e. on the things you +have to do to maintain an internationalized Perl package, so that +users of your package will benefit from translations you provide. It +therefore doesn't make use of any of the nitty-gritty details of +message translation like plural handling or the like. + +Requirements +------------ + +The only requirement is a Perl aware version of GNU gettext. Perl +support was introduced only recently in GNU gettext, and you will have +to check whether your copy of GNU gettext already supports Perl. +Support for Perl was introduced in version 0.12.2 of GNU gettext. If +your version is older, you have to update GNU gettext. + +First test +---------- + +The subdirectory "simplecal" contains a regular Perl package like the +ones you will find on the CPAN. You should first try to build and +use the package: + + cd simplecal + perl Makefile.PL + make + +If you see a warning that the prerequisite Locale::TextDomain is not +found, then you have to install libintl-perl first. + +You should never "make install", the package is only a stupid example +and you will not really want to install it. You can simply try it out +from the installation directory itself: + + perl -Ilib bin/simplecal.pl + +It should print a crude calendar representation in English, or even in +your preferred language, depending on your system settings. + +The Programming +--------------- + +Now we should dig into the sources. All relevant files are commented +and should give you a pretty good idea of what's going on. Change +your directory to the package directory "simplecal" and inspect the +source files. + +The heart of the library is found in the file lib/SimpleCal.pm. This +Perl module defines functions that map numeric values to month names +or abbreviated week day names. You will find nothing unusual in this +module except for a line at the beginning of the file that reads: + + use Locale::TextDomain qw (com.cantanea.simplecal); + +In case you are not familiar with the operator "qw", this is an +equivalent writing of + + use Locale::TextDomain ('com.cantanea.simplecal'); + +That line in the code does three things: It imports the module +Locale::TextDomain, *and* it states that the text domain (or +identifier) for this package is "com.cantanea.simplecal", *and* it says +that the translations for this package can be found in the +subdirectory "LocaleDate" of any component of @INC (unless it can be +found in one of the system locations). See the POD in +Locale::TextDomain for more information. + +You may also find out that some strings have a "__" or a "N__" in +front of them. The explanation to these funny things has two sides: +First, they mark the following strings as being translatable, so that the +parser "xgettext" included in GNU gettext can find them. Yet, at runtime +both "__" and "N__" are really function names, and they will look up +their argument in the translation database. There is more +documentation available on this. Guess where! Yepp, in the POD of +Locale::TextDomain. + +The library is used by a Perl script "bin/simplecal.pl". Let's have a +look at that script now. The first remarkable line is the one that +calls POSIX::setlocale(): + + setlocale (LC_MESSAGES, ''); + +The POD of the POSIX module gives additional information on the +function setlocale(). In brief, that call initializes the locale +settings for the category "LC_MESSAGES" to the pre-selected user +settings (this is indicated by the empty second argument). The +constant LC_MESSAGES is exported by Locale::Messages, which is always +a safe choice. If your script is only intended to run with Perl 5.8 +or better, you can also import LC_MESSAGES from the POSIX module. + +The rest of the program only prints a calendar for the current month. +It retrieves the name of the month and the abbreviated weekday names +from our little SimpleCal.pm module which provides this information in +a localized form. + +A Dutch Calendar +---------------- + +We want to see the calendar in Dutch now. All you have to do is to +set the environment variable LANGUAGE to the value "nl". If you don't +know how to do this, add the following line somewhere at the top of +"bin/simplecal.pl": + + $ENV{LANGUAGE} = "nl"; + +Now run the script again: + + perl -Ilib bin/simplecal.pl + +It should print out the calendar in Dutch. Look at the *.po files in +the subdirectory "po" for a list of other translations I have +prepared. You can try them out in a similar manner. + +Please see the file "README-NLS" in subdirectory "sample/simplecal" +for details on how to set the language via environment variables. + +The Subdirectory "po" +--------------------- + +This directory contains the raw translations and a Makefile that will +compile and install them. If you enter this directory and type "make" +you will see a list of the available Makefile targets. + +The first one is the target "pot", a so-called phony target, i. e. it +is not related to a file with the name of "pot". The command "make +pot" will remake the master catalog of the package and place the +result in the file "com.cantanea.simplecal.pot" +("com.cantanea.simplecal" is the text domain resp. identifier for our +package). Type the command "make pot" now to see how the master +catalog is actually generated. If the output says something like +"nothing to be done for `pot'", then delete the file +"com.cantanea.simplecal.pot" and try again. + +You should see now that the target file "com.cantanea.simplecal.pot" is +generated by the program xgettext with a plethora of options: + + xgettext --output=./com.cantanea.simplecal.pox --from-code=utf-8 \ + --add-comments=TRANSLATORS: --files-from=./POTFILES \ + --copyright-holder="Imperia AG Huerth/Germany" \ + --keyword --keyword='$__' --keyword=__ --keyword=__x \ + --keyword=__n:1,2 --keyword=__nx:1,2 --keyword=__xn \ + --keyword=N__ --language=perl && \ + rm -f com.cantanea.simplecal.pot && \ + mv com.cantanea.simplecal.pox com.cantanea.simplecal.pot + +Type "xgettext --help" for a detailled explanation of the command line +options. In brief this invocation causes xgettext to read a list of +files from the file "POTFILES", extract all messages from these +source files and place the result in the output file +"com.cantanea.simplecal.pox". If the command succeeds, the old ".pot" +file is replaced by the new ".pox" file. + +Yes, this is complicated, and that is why this skeleton Makefile is +provided here. You can copy it without any modification into your +package to use it. + +The file POTFILES contains a list of source files to be scanned for +translatable strings. Have a look at it, and you will understand it. + +The Makefile also includes a file called "PACKAGE". This file contains +all package-dependent information in a couple of Makefile variables: + +- TEXTDOMAIN +This Makefile variable should contain the text domain/identifier +for your package. Please see the POD of Locale::TextDomain for advice +on a reasonable naming. + +- LINGUAS +The language codes of all languages supported by your package. Each +entry corresponds to a po file in the po subdirectory. + +- COPYRIGHT_HOLDER +Usually your name. Whatever you put here will be included as the +copyright holder in the header of the po files. + +- MSGID_BUGS_ADDRESS +Usually your name and e-mail address. It will also be included in the +po header and translators will check this entry when they come across +a bug in a msgid, or when they have difficulties to translate a certain +message because of awkward coding on your side. + +Okay, after "make pot" we have updated the master message catalog +TEXTDOMAIN.pot, in our case "com.cantanea.simplecal.pot". Have a look +into the file now. It contains the original English messages that +xgettext has extracted from our source files and blank translations. +The po files (the files the names of which end with ".po") contain +previous translations provided by our package translators. Whenever +you change the Perl sources, the list of messages may change. This +results in a maybe new .pot file and requires an update of all po +files. Try that now and type "make update-po" + +You will see confusing output from "make" but you may get the idea +that every single po file (every language that the package supports) +gets updated, and the new strings are inserted into the po +files. Since nothing really changed here (we did not change the source +files yet) you can now try to update the compiled po files which end in +".gmo" (for GNU mo format) with "make update-mo". + +Again, you will see maybe cryptic output from "make" that signifies +that all compiled files are re-generated now by a program called +"msgfmt". + +The last step requires that you copy the (possibly changed) mo files +into your package by "make install". This will copy the gmo files as +".mo" files into the subdirectory "LocaleData" of your package so that +libintl-perl is able to find them at runtime. + +You can perform all these steps at once by typing "make all" although +this is mostly useful for testing purposes. In reality the workflow +is different: + +- You change your source files, messages may have been added, deleted + or modified. You will have to update the master message catalog by + typing "make pot". + +- Since the translations may have gotten out-of-date, you will have to + merge your changes into all po files by "make update-po". + +- Your translators will get copies of the po files, reflect your + changes in the po files and send them back to you. + +- When you have received the updates, it is time to compile the po + files into a binary representation with "make update-mo". + +- These binary mo files have to be installed under "LocaleData", and + you have to "make install". Note that "make install" installs the + mo files in your source package, not in the system location! + +- Now that you have updated the translations for your package, you + will want to upload a new version to the CPAN. + +Note that all these steps are *only* necessary for package +maintainers. As a user of the package, you will only see the +resulting mo files under "LocaleData". End users do *not* need any of +the gettext tools, and they do not have to perform any of the above +steps theirselves! + +Changing the Sources +-------------------- + +You may wonder whether your translators have to re-translate +everything from scratch whenever you change your Perl sources. This +is, of course, not the case. Let's say, you want to add a welcome and +a good-bye message to the program output. Have a look into +"bin/simplecal.pl" and you will see that this is already prepared but +commented out (search for "Welcome to" and "Bye" if you can't find +it). Uncomment these lines and see what happens to the po files in +that case. + +Before you proceed, you should have a look at the Dutch translation +file "nl.po". At the bottom you will find some lines that are +commented out with "#~" and that proove that I have already prepared +that case. The comment sign "#~" in po files signifies that a +particular translation is obsoleted, i. e. no longer needed because it +is no longer present in the source files. + +Say, that you have really changed your mind, and you want to +re-introduce the welcome and good-bye messages to your program and you +uncomment the corresponding lines in "bin/simplecal.pl". You will +have to re-make the master catalog "com.cantanea.simplecal.pot" by +"make pot", and then "make update-po" to update the po files. In +fact, "make update-po" is sufficient because it will also update the +pot file if it is out-of-date (i. e. if any of the source files have +changed in the meantime). + +Type "make update-po" now, and look again at "po/nl.po". You will see +that the previously translated welcome and good-bye messages have been +re-activated from the obsoleted entries. In fact your translators +will have nothing to do, because their old translations are still +valid. Type "make install" and then re-run "perl -Ilib +bin/simplecal.pl", set the environment variable "LANG" to any of the +available languages, and things will still work perfectly. + +Of course, it is a rare case that messages are discarded and later +re-activated in programming sources. It is more likely that you will +modify a message, or maybe add a message that is similar to former +ones. Let's say that you want to change the exclamation mark in the +good-bye message at the bottom of the script to a simple full stop. +Look for the line that reads + + print __"Bye!\n"; + +and change it into + + print __"Bye.\n"; + +Change into the directory "po", update the translation files with +"make update-po" and inspect the file "nl.po". At first glance, you +may not see any change. But then: The entry for the good-bye message +has an additional comment "#, fuzzy". The fuzzy mark signifies that +the msgerge program has found that a message is very similar to a +previous message (even obsoleted ones are taken into account), and +that it proposes an old translation here. The translator will +normally modify the translation accordingly (without having to re-type +everything), remove the fuzzy mark and send back the translation to +you. + +In fact you could also install translations that have not been revised +by the translator and are still marked as fuzzy. This is not +recommended however! The algorithm used in msgmerge is quite smart +and seldom fails to detect minimal changes in the source message and +propose the old translation. However, it often proposes translations +from other valid or obsoleted entries that are only vaguely related to +the real meaning. You should understand the fuzzy merging mechanism +as a helpful feature to the translator only and never install fuzzy +translations unless you absolutely know what you are doing. + +Pass Comments to Translators +---------------------------- + +The po files contain references for every message to the corresponding +source files as comments. But you still may feel a need for giving +hints to the translators. You may want to tell the translators, that +the good-bye message can be somewhat sloppy (or whatever you like). +This is simple to do. Have a look at the good-bye message in +"bin/simplecal.pl" and you will see that it is preceded by a comment +introduced with the string "TRANSLATORS:". If you start your Perl +comment like this, it will end up as a comment for translators in the +resulting po (resp. pot) file and may serve as a hint for translators. + +In fact, the string "TRANSLATORS:" is arbitrarily chosen. If you +prefer another string, change it in the invocation of "xgettext" in +the skeleton Makefile provided here. + +Informational Files +------------------- + +You should put two additional files in your distribution. The first +one is "README-NLS". It should be a verbatim copy of the most recent +version found in the "simplecal" sample package. Please send +corrections or improvements to this file to the maintainer Guido +Flohr , and add package-specific notes to your +documentation instead. Users expect this file to have a standard +contents, and they will not check it for changes on a regular basis. + +The file "TRANSLATIONS" should reflect the current translation status +of your package. It should list all currently availabe translations, +their completeness, and it should also inform your user which translations +are actively maintained, and which are not. You can find a sample +in the "simplecal" sample package. + +Bringing It All Together +------------------------ + +The above sounds definitely more complicated than it is. In practice +you code as before but mark all your strings with "__" and friends +like described in the POD of Locale::TextDomain. Before a new release +you change into the directory "po" of your distribution and type "make +update-po" to update the available translations. Distribute the +modified po files to your translators, and once you have collected +them all, type "make install" to add them to your distribution. + +That's all, all translations will be available in your package now. + +Internationalizing Existing Packages +------------------------------------ + +Internationalizing an already existing package with libintl-perl is +less painful than you think. The following roadmap should do it with +minimal effort. + +First create a subdirectory "po" in your sources, copy the "Makefile" +from this sample, and copy and edit the files "TEXTDOMAIN" and +"LINGUAS" (LINGUAS can set the Makefile variable "LINGUAS" to the +empty string and TEXTDOMAIN should set "TEXTDOMAIN" to a name as +advised in the POD of Locale::TextDomain). + +Next you have to mark the translatable strings in your sources with +"__" and friends. You can do that by hand, but isn't that the kind of +job that you have bought a computer for? List your source files in +"po/POTFILES" and then try + + xgettext -a --files-from=POTFILES -o all.pot + +The option "-a" instructs xgettext to extract *all* strings from your +sources. This option may miss a few strings (consider a bug report in +that case), it will issue a lot of warnings about "illegal variable +interpolations" (see the POD of Locale::TextDomain for workarounds) +and will put a lot of strings extracted from your sources into the +file "all.pot". + +Now, load the file "all.pot" into an editor of your choice. If your +choice is "GNU emacs" you will have maximum comfort: Select an entry, +type "s" and you can cycle through the source files that this +particular entry originates from. Other PO editors like KBabel or +PO-Edit provide similar functionality. But even with the "Notepad" on +MS-DOS you will be able to navigate to the corresponding source file. +Once you have found the origin in your sources, you have to decide +whether this is a false positive, and you simply ignore it. If it is +a translatable string you either simply mark it with "__" or you +"repair" it. + +What does "repair" mean? Again, the POD of Locale::TextDomain... In +brief: Your Perl sources will be full of stuff like: + + die "Cannot open file '$filename': $!\n"; + +This string is not suitable for translation, because it is not +constant. It may change depending on the value of the variable +$filename and the value of $!. You will have to change that into +something like: + + die __x ("Cannot open file '{filename}': {err}\n", + filename => $filename, err => $err); + +Once you are done with marking the strings, you can try to run your +scripts/modules and you will see a lot of complaints by Perl that it +doesn't know about "__" (in various incarnations). Remember that "__" +is really a function call and you have to import the function "__" and +its relatives into your namespace. + +What you have to do is to invent an identifier for your package (see +Locale::TextDomain for hints) and then add the following line to all +of your source files that produced errors: + + use Locale::TextDomain ('Name-Of-My-Package'); + +You will be happy if "Name-Of-My-Package" is the same as the Makefile +variable "TEXTDOMAIN" in the file "po/TEXTDOMAIN" that you have +created in the beginning. + +For the common case of a pure library: Is that really all I have to +do? Yes! What about POSIX::setlocale(), don't I have to make a call +somewhere? No, not for a library! And what about calls to textdomain() +and bindtextdomain() that I know from C or other languages? No, this +is all hidden in "use TextDomain (PACKAGENAME)" for Perl. + +To make it clear again: A library should NEVER change the locale +settings. The script that uses a library (or multiple libraries) +should do that, and this boils down to three lines of Perl: + + use POSIX qw (setlocale); + use Locale::Messages (LC_MESSAGES); + + setlocale (LC_MESSAGES, ""); + +That means: The *calling* Perl script, the one that uses possibly +internationalized libraries, should initialize the locale settings to +the user preferences. Libraries should honor that setting but should +never change it. If a script misses a call to setlocale(), your +internationalized library will happily continue to work flawlessly +with the original English messages, it is up to the client programmer +to reveal the i18n features in your code! + +Good luck! + +Guido diff --git a/sample/simplecal/.gitignore b/sample/simplecal/.gitignore new file mode 100644 index 0000000..d5794a4 --- /dev/null +++ b/sample/simplecal/.gitignore @@ -0,0 +1,2 @@ +*.gmo +LocaleData/ diff --git a/sample/simplecal/MANIFEST b/sample/simplecal/MANIFEST new file mode 100644 index 0000000..86eca9a --- /dev/null +++ b/sample/simplecal/MANIFEST @@ -0,0 +1,32 @@ +MANIFEST +Makefile.PL +bin/simplecal.pl +lib/SimpleCal.pm +po/Makefile +po/PACKAGE +po/POTFILES.in +po/ar.po +po/ar_SA.po +po/cs.po +po/de.po +po/de_AT.po +po/fr.po +po/ga.po +po/it.po +po/nl.po +po/com.cantanea.simplecal.pot +po/pt.po +po/pt_BR.po +po/ru.po +lib/LocaleData/de/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/fr/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/ar/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/ar_SA/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/de_AT/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/ga/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/it/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/pt/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/pt_BR/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/nl/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/ru/LC_MESSAGES/com.cantanea.simplecal.mo +lib/LocaleData/cs/LC_MESSAGES/com.cantanea.simplecal.mo diff --git a/sample/simplecal/Makefile.PL b/sample/simplecal/Makefile.PL new file mode 100644 index 0000000..0507259 --- /dev/null +++ b/sample/simplecal/Makefile.PL @@ -0,0 +1,53 @@ +#! /usr/local/bin/perl -w # -*- perl -*- + +# vim: tabstop=4 + +# Makefile generator for libintl-perl. +# Copyright (C) 2002-2015 Guido Flohr , +# all rights reserved. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. + +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, +# USA. + +use ExtUtils::MakeMaker; + +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. + +WriteMakefile( + NAME => 'simplecal', + VERSION_FROM => 'bin/simplecal.pl', + PREREQ_PM => { + Locale::TextDomain => 0, + }, + EXE_FILES => [ 'bin/simplecal.pl' ], + AUTHOR => 'Guido Flohr ', + ABSTRACT => 'Demonstration package for libintl-perl', +); + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/sample/simplecal/README-NLS b/sample/simplecal/README-NLS new file mode 100644 index 0000000..4e58595 --- /dev/null +++ b/sample/simplecal/README-NLS @@ -0,0 +1,190 @@ +Notes on National Language Support (NLS) +**************************************** + +This package is internationalized with libintl-perl, a free +internationalization library for Perl, you will need to install a copy of +libintl-perl in order to use the package. You can get libintl-perl from the +Comprehensive Perl Archive Network CPAN at http://www.cpan.org/. + +The following notes are meant to be a quick start guide for somewhat +experienced users and system administrators and many important details had to +be omitted for brevity. + +Feel free to include this document in your own Perl packages internationalized +with libintl-perl, no severe copyright restrictions apply. You should send +corrections or improvements to the author Guido Flohr , so that others can benefit from your changes. + +The End User's View +=================== + +The installation routine for this package will automatically take care that +your system has a sufficient version of libintl-perl installed. This is +basically sufficient for proper operation, but - especially if +internationalized software is new to you - you should read on carefully in +order to fully benefit from the internationalization (I18N) features of this +package. + +Perl Setup +---------- + +The I18N library libintl-perl will run with a wide range of Perl versions (at +least from Perl version 5.005_03) but you will experience slight +difference in features and performance depending on the version of Perl you +use. + +With Perl versions prior to 5.7.3 you can use the package for all European +scripts (including those with Greek or Cyrillic scripts), and also for many +scripts used outside Europe, like Arabic, Hebrew, Georgian, Vietnamese or +Thai, more general all scripts using 8 bit charsets. Other scripts are only +available if the translations in this package are provided in Unicode and they +can only be output in Unicode. + +Beginning with Perl 5.7.3 the module Encode became part of the Perl core, and +it offers you a much wider range of possible scripts. If you plan to use some +of the lesser used scripts for Chinese, Japanese, and Korean, you should also +install the module Encode::HanExtra. + +Setting Your Language +--------------------- + +Most modern systems are already prepared and configured for +internationalization, and the user interface of the software you have +installed will already be configured for your preferred language. Packages +internationalized with libintl-perl will honor these configuration settings +and will also operate in your preferred language if the necessary translations +are available. + +The environment variable "LANGUAGE" has the highest precedence for +translations. The most common format for this environment variable is a +(lowercase) two-letter language code and an (uppercase) two-letter country +code separated by an underscore "_", for example: + + LANGUAGE=fr_BE + export LANGUAGE + +This will set your language preferences to French ("fr") for Belgium ("BE"). +Other examples are French for France ("fr_FR"), German for Austria ("de_AT"), +and so on. You can also omit the country part ("FR", "DE", "IT", "RU", ...) +in which case a default setting for the country will be assumed. + +If there are no translations available for your selected languages, the +original message (normally in English) will be displayed. + +You can also define a chain of languages to be tried separated by a colon: + + LANGUAGE=fr_BE:fr_FR:fr:it + +Read this as: "I want translations in French for Belgium. If they are not +available try French for France, then any French translation, and finally +Italian". Please note that this chain notation is only allowed for the +environment variable "LANGUAGE", it is not valid for any of the following +variables. + +If "LANGUAGE" is not set, the library checks the variable "LANG". It has the +same syntax as "LANGUAGE" but does not allow the preferences chain with the +colon syntax. After "LANG" the variable "LC_ALL" is tried, and finally +"LC_MESSAGES" (think "locale category messages"). + +IMPORTANT! The environment variable "LANGUAGE" is ignored, if neither the +environment variable "LC_ALL" or "LC_MESSAGES" is set to a valid locale on +your system. It is also ignored, if the resulting locale is the fallback +locale "C" or "POSIX". + +Note for Microsoft Windows users: The locale preferences you have configured +for your system cannot yet be evaluated by libintl-perl. This may change for +future versions of libintl-perl but for the moment you have to make do with +the instructions given above. In order to set environment variables, you have +to right-click on the icon "My Computer" on your desktop, select "Properties" +in the context menu, and then click the tab labelled "Environment variables". + +Setting the Output Charset +-------------------------- + +Even if you have managed to properly select your preferred language, you may +still have difficulties reading the program languages, because libintl-perl +was unable to determine the correct charset to use for messages. For example, +it may assume Unicode ("UTF-8") but you really need ISO-Latin-1 (also known as +"Latin-1" or "ISO-8859-1"). If this is the case, please set the environment +variable "OUTPUT_CHARSET" to the appropriate value, for example: + + OUTPUT_CHARSET=iso-8859-1 + export OUTPUT_CHARSET + +Charset names are case-insensitive, i. e. "LATIN-1" is equivalent to +"Latin-1" or even "lAtIn-1". + +Note: The output charset "utf8" is NOT recognized. Please use the correct +abbreviation "utf-8" (with a hyphen) instead. + +The Translator's View +===================== + +If you want to contribute a new translation to this package, please contact +the author first. Somebody may have already started this translation, and +furthermore the package author will be able to give you detailled instructions +and help. + +Translating a Perl package is not much work and it does not require any +technical skills. If you are able to use the software itself, you will also +be able to contribute a translation for your language. But why should you do +that? You are able to read and understand this text and you will also be able +to understand the English messages that the software spits out by default. + +Computers are an integral part of today's society. Computers are used to +explore new sources of information, forbidding computers would be a modern +form of censorship. Computers may also improve social life, the internet +helps people to find contacts in their area and all over the world, even if +they would otherwise be deprived from that because of a handicap, lack of money +for traveling, or other reasons. In many societies, the ability to use and +handle a computer also has a strong impact on your perspectives in life, you +may not be able to find an adequate job because of your lack of computer +experience, or you may even lose your job because of that. + +Everybody should benefit from computers, regardless of cultural +background. Computers are expansive goods, and their price is already a high +barrier to cross. If computers speak in a foreign language, the learning +curve gets steeper and the barrier gets even higher. You can help the people +that share your native language by contributing a translation. The author of +this package has already prepared everything, the rest is up to you! + +The Programmer's View +===================== + +You have downloaded this package because you want to use it in your own +project(s). The fact that the package is internationalized with libintl-perl +does not affect its usability in any way. But you should keep in mind that +textual messages produced by the package may change according to the locale +settings at run-time. This can lead to errors. For example, if you parse +error messages produced by the package, you will most probably fail to detect +what you are looking for, if these error messages are suddenly presented in +another language or another output charset. + +It is probably needless to say that this is bad practice and an indicator for +a poorly written interface. Either you have missed the correct method for +determining the substance of the message in a locale-independent manner, or +the author of the package has mis-designed the package interface. In any +case, this is a technical problem that should be solved by technicians. You +should not put that burden on the shoulders of your users but rather solve the +problem in cooperation with the author of the module that causes it. + +If this is absolutely impossible, as a temporary workaround you can completely +switch off the native language support of the package by setting the +environment variable "LANGUAGE" to the special value "C": + + BEGIN { + $ENV{LANGUAGE} = $ENV{LANG} = "C"; + } + +The value "C" instructs libintl-perl to leave all messages untouched, and you +can use the package as if it was not internationalized at all. + +If the project you are working on is not yet internationalized, you should +consider to prepare it for internationalization now. Doing so is only little +work for yourself, but results in a large benefit for the users of your +software. The package "libintl-perl" ships with exhaustive documentation for +programmers and a sample package that you can use as a skeleton for your own +project(s). Internationalizing Perl software with libintl-perl is easy, the +package that this file is a part of, prooves that. + +Guido Flohr diff --git a/sample/simplecal/TRANSLATIONS b/sample/simplecal/TRANSLATIONS new file mode 100644 index 0000000..9c90da4 --- /dev/null +++ b/sample/simplecal/TRANSLATIONS @@ -0,0 +1,41 @@ +This package is internationalized with libintl-perl. It can be configured +to speak in different languages. If your language is still missing, you +should take a look into the file "README-NLS" (section "The Translator's +View") where you will find instructions for contributing a translation +into your language to this package. + +You can see the translation status of this package for various languages +in the following table. If your language is completely missing in the +table, your translation will be welcomed as a contribution to the +project. + +Translation Status for "simplecal" +================================== + +Language | Code | Status | Current Translator +--------------------+-------+---+----+--------------------------------- +Arabic | ar | O | C | Guido Flohr +Arabic/Saudi Arabia | ar_SA | O | C | Guido Flohr +Dutch | nl | O | C | Guido Flohr +French | fr | O | C | Guido Flohr +German | de | A | C | Guido Flohr +German/Austria | de_AT | O | C | Guido Flohr +Irish | ga | O | C | Guido Flohr +Italian | it | O | C | Guido Flohr +Portuguese | pt | O | C | Guido Flohr +Portuguese/Brazil | pt_BR | O | C | Guido Flohr +Russian | ru | O | C | Guido Flohr + +Legend: The status is displayed in two columns. The left column informs +you whether somebody is already in charge of that translation, the right +columns reflects the status of the translation itself. + +Left: (O) - Orphaned: The translation needs a new maintainer. You? + (A) - Assigned: The translation already has a maintainer. + +Right: (C) - Complete: All messages are translated. + (M) - Mostly: Most (all important) messages are translated. + (P) - Partially: The translation is only partially done. + (-) - Missing: No translation is currently available. + +Messages for missing translations will be displayed in English. diff --git a/sample/simplecal/bin/simplecal.pl b/sample/simplecal/bin/simplecal.pl new file mode 100644 index 0000000..4b70e02 --- /dev/null +++ b/sample/simplecal/bin/simplecal.pl @@ -0,0 +1,105 @@ +#! /usr/local/bin/perl -w +# vim: tabstop=4 + +use strict; + +# Include our little library. +use SimpleCal; + +# For setlocale. +use POSIX qw (setlocale); +use Locale::Messages qw (LC_MESSAGES); + +# Our script contains translatable messages. We have to assign +# it a text domain. Note that this is only needed here because the +# script *itself* contains translatable messages from the text domain +# "com.cantanea.simplecal". +use Locale::TextDomain ('com.cantanea.simplecal'); + +use vars qw ($VERSION); +$VERSION = '1.0'; + +# Set the locale according to the environment. +setlocale LC_MESSAGES, ""; + +# Print a greeting message. We want to be flexible with the package +# name, and so we will make this a placeholder. +my $package_name = "SimpleCal"; +#print __x("Welcome to {package}!\n", package => $package_name); + +# Inquire current date and time. +my @now = localtime; +my $year = $now[5] + 1900; # Current year. +my $month = $now[4]; # Current month in the range of 0-11. + +# Print the header for our calendar. +my $month_name = SimpleCal::month_name ($month); +print "\t$month_name $year\n"; + +# And now print the abbreviation for every day of the week. +foreach my $i (0 .. 6) { + # This makes the (insecure!) assumption that the abbreviated + # week day is no longer than 5 characters. + printf "%6s", abbr_week_day ($i); +} +# And a final newline. +print "\n"; + +# The rest of the program only prints out the day numbers and is not +# particularly interesting. + +# We will start at a Sunday where month day <= 0 and suppress negative dates +# later. +my $first_day = $now[3] - $now[6]; +if ($first_day > 0) { + $first_day %= 7; + $first_day -= 7; +} + +my $last_day; +if ($month == 1) { + if (SimpleCal::is_leap_year ($year)) { + $last_day = 29; + } else { + $last_day = 28; + } +} elsif ($month == 3 || $month == 5 || $month == 8 || $month == 10) { + $last_day = 30; +} else { + $last_day = 31; +} + +my $day_of_week = 0; # Sunday. +foreach my $mday ($first_day .. $last_day) { + if ($mday <= 0) { + printf "%6s", ' '; + } else { + printf "% 6d", $mday; + } + ++$day_of_week; + if ($day_of_week == 7) { + $day_of_week = 0; + print "\n"; + } +} + +print "\n" if $day_of_week; + +# Say good bye. +# TRANSLATORS: This may be a colloquial way of saying good bye to the user. +#print __"Bye.\n"; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/sample/simplecal/lib/SimpleCal.pm b/sample/simplecal/lib/SimpleCal.pm new file mode 100644 index 0000000..ae521b4 --- /dev/null +++ b/sample/simplecal/lib/SimpleCal.pm @@ -0,0 +1,136 @@ +#! /bin/false +# vim: tabstop=4 + +package SimpleCal; + +use strict; + +# The text domain (identifier) of our package is 'com.cantanea.simplecal', +# following the advice in the pod of Locale::TextDomain. +use Locale::TextDomain qw (com.cantanea.simplecal); + +use base qw (Exporter); +use vars qw (@EXPORT); + +@EXPORT = qw (month_name abbr_week_day is_leap_year); + +sub month_name ($) +{ + my $month = shift; + $month = 0 unless $month; + $month %= 12; + + # This is of course stupid but explains things best. See the + # function abbr_week_day() for a smarter approach. + if ($month == 0) { + return __"January"; + } elsif ($month == 1) { + return __"February"; + } elsif ($month == 2) { + return __"March"; + } elsif ($month == 3) { + return __"April"; + } elsif ($month == 4) { + return __"May"; + } elsif ($month == 5) { + return __"June"; + } elsif ($month == 6) { + return __"July"; + } elsif ($month == 7) { + return __"August"; + } elsif ($month == 8) { + return __"September"; + } elsif ($month == 9) { + return __"October"; + } elsif ($month == 10) { + return __"November"; + } else { + return __"December"; + } +} + +# This is smarter. We initialize an array with the English names first. +# The function N__() is exported by Locale::TextDomain and returns +# its argument unmodified. Its sole purpose is to mark the string as +# being translatable, so that it will make it into the pot file for +# our package. +# +# It is dangerous to use __() here! Why? Then the array will be translated +# only once, at compile time. It is very likely that the locale settings +# have not yet been initialized to the user preferences at this point +# of time, and since the array is already created, the translation +# will not produce the correct results. +# +# This should become clearer if you imagine that our library would be +# part of a daemon that is running for days or even years. The array +# would be initialized with the language that was set at program startup +# and would then never change again, because you actually cache the +# translations. +my @abbr_week_days = ( + N__"Sun", + N__"Mon", + N__"Tue", + N__"Wed", + N__"Thu", + N__"Fri", + N__"Sat", +); + +sub abbr_week_day ($) +{ + my $wday = shift; + $wday = 0 unless $wday; + $wday %= 7; + + # The argument to __() is simply a string, not necessarily a string + # constant. The following line will look up the English name in the + # array, and then translates that string on the fly into the current + # user language. + return __($abbr_week_days[$wday]); + # This can still be suboptimal because it translates the string again + # and again. In situations where you are absolutely sure that the + # user language will not change again, you may prefer to cache the + # translations despite of the above hints, especially if you + # call the function very many times. In a library you can usually + # not be sure whether the user language can change or not and you + # should avoid that. The message lookup is quite fast. + + # Instead of the above return directive we could also have written: + # + # return $__{$abbr_week_days[$wday]}; + # + # resp. + # + # return $__->{$abbr_week_days[$wday]}; + # + # It is basically a matter of taste whether you prefer the tied + # hash lookup or the function call. +} + +# Check whether the argument is a leap year. +sub is_leap_year +{ + my $year = shift; + $year = 0 unless $year; + + return 1 if $year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0); + + return; +} + +1; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/sample/simplecal/po/Makefile b/sample/simplecal/po/Makefile new file mode 100644 index 0000000..f6263ff --- /dev/null +++ b/sample/simplecal/po/Makefile @@ -0,0 +1,84 @@ +# Makefile for various po files. + +srcdir = . +libdir = ../lib + +MSGMERGE = msgmerge +MSGFMT = msgfmt +XGETTEXT = xgettext +CATOBJEXT = .po +PERL = perl + +include PACKAGE + +MO_FILES = $(addsuffix .gmo, $(LINGUAS)) + +TD = $(strip $(TEXTDOMAIN)) + +default: help + +all: $(TD).pot update-po update-mo install + +help: + @echo "Available targets:" + @echo " pot - remake master catalog" + @echo " update-po - merge po files" + @echo " update-mo - regenerate mo files" + @echo " install - install mo files" + @echo " all - all of the above" + +POTFILES = $(srcdir)/POTFILES \ + $(shell cat $(srcdir)/POTFILES) + +pot: $(TD).pot + +clean: + rm -f *~ *.bak *.gmo + +$(TD).pot: $(POTFILES) + $(XGETTEXT) --output=$(srcdir)/$(TD).pox --from-code=utf-8 \ + --add-comments=TRANSLATORS: --files-from=$(srcdir)/POTFILES \ + --copyright-holder="$(COPYRIGHT_HOLDER)" \ + --msgid-bugs-address="$(MSGID_BUGS_ADDRESS)" \ + `$(PERL) -MLocale::TextDomain \ + -e "print Locale::TextDomain->options"` && \ + rm -f $@ && mv $(TD).pox $@ + +install: $(MO_FILES) + cd $(srcdir); \ + targetdir='$(libdir)/LocaleData'; \ + languages='$(LINGUAS)'; \ + for lang in $$languages; do \ + mkdir -p "$$targetdir/$$lang/LC_MESSAGES" || exit 1; \ + dest="$$targetdir/$$lang/LC_MESSAGES/$(TD).mo"; \ + cat="$$lang.gmo"; \ + echo "installing $$cat as $$dest"; \ + cp -f $$cat $$dest && chmod 644 $$dest || exit 1; \ + done + +update-mo: $(MO_FILES) + +update-po: + $(MAKE) $(TD).pot + cd $(srcdir); \ + catalogs='$(LINGUAS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + mv $$lang.po $$lang.old.po; \ + echo "$$lang:"; \ + if $(MSGMERGE) $$lang.old.po $(TD).pot -o $$lang.po; then \ + rm -f $$lang.old.po; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$lang.po; \ + mv $$lang.old.po $$lang.po; \ + fi; \ + done + +.SUFFIXES: +.SUFFIXES: .po .gmo + +.po.gmo: + $(MSGFMT) --check --statistics --verbose -o $@ $< + diff --git a/sample/simplecal/po/PACKAGE b/sample/simplecal/po/PACKAGE new file mode 100644 index 0000000..e18c003 --- /dev/null +++ b/sample/simplecal/po/PACKAGE @@ -0,0 +1,27 @@ +# Makefile snippet that holds all package-dependent information. + +# Add more languages here! Beware that this is a makefile snippet and +# you have to adhere to make syntax. +LINGUAS = de \ + de_AT \ + it \ + ru \ + fr \ + ar \ + ar_SA \ + ga \ + pt \ + pt_BR \ + nl \ + cs + +# Textdomain for our package. +TEXTDOMAIN = com.cantanea.simplecal + +# Initial copyright holder added to pot and po files. +#COPYRIGHT_HOLDER = Guido Flohr +COPYRIGHT_HOLDER = Edit the file PACKAGE to change this + +# Where to send msgid bugs? +#MSGID_BUGS_ADDRESS = Guido Flohr +MSGID_BUGS_ADDRESS = Edit the file PACKAGE to change this diff --git a/sample/simplecal/po/POTFILES b/sample/simplecal/po/POTFILES new file mode 100644 index 0000000..f1b5acc --- /dev/null +++ b/sample/simplecal/po/POTFILES @@ -0,0 +1,2 @@ +../bin/simplecal.pl +../lib/SimpleCal.pm diff --git a/sample/simplecal/po/ar.po b/sample/simplecal/po/ar.po new file mode 100644 index 0000000..39ecdd3 --- /dev/null +++ b/sample/simplecal/po/ar.po @@ -0,0 +1,96 @@ +# Arabic translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-27 18:56+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-6\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "�����" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "������" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "����" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "�����" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "����" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "�����" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "�����" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "�����" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "������" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "������" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "������" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "������" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "�" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "�" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "�" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "�" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "�" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "�" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "�" + +#~ msgid "Welcome to {package}!\n" +#~ msgstr "���� �� {package} ��\n" + +#~ msgid "Bye.\n" +#~ msgstr "!��� ������\n" diff --git a/sample/simplecal/po/ar_SA.po b/sample/simplecal/po/ar_SA.po new file mode 100644 index 0000000..d1f6311 --- /dev/null +++ b/sample/simplecal/po/ar_SA.po @@ -0,0 +1,90 @@ +# Arabic translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-27 18:56+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-6\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "����� ������" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "����" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "����" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "�����" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "������" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "����" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "����" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "��" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "�����" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "����� �����" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "����� ������" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "����� �����" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "" diff --git a/sample/simplecal/po/com.cantanea.simplecal.pot b/sample/simplecal/po/com.cantanea.simplecal.pot new file mode 100644 index 0000000..bda19e4 --- /dev/null +++ b/sample/simplecal/po/com.cantanea.simplecal.pot @@ -0,0 +1,94 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Edit the file PACKAGE to change this +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: Edit the file PACKAGE to change this\n" +"POT-Creation-Date: 2017-08-30 22:51+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "" diff --git a/sample/simplecal/po/cs.po b/sample/simplecal/po/cs.po new file mode 100644 index 0000000..2f8c9b5 --- /dev/null +++ b/sample/simplecal/po/cs.po @@ -0,0 +1,96 @@ +# Czech translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-28 04:21+0200\n" +"Last-Translator: Jan Tomášek \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "Leden" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "Únor" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "Březen" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "Duben" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "Květen" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "Červen" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "Červenec" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "Září" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "Říjen" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "Listopad" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "Prosinec" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "Prosinec" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "Ne" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "Po" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "Út" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "St" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "Čt" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "Pá" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "So" + +#~ msgid "Welcome to {package}!\n" +#~ msgstr "Vítejte v {package}!\n" + +#~ msgid "Bye.\n" +#~ msgstr "Nashledanou!\n" diff --git a/sample/simplecal/po/de.po b/sample/simplecal/po/de.po new file mode 100644 index 0000000..7895373 --- /dev/null +++ b/sample/simplecal/po/de.po @@ -0,0 +1,97 @@ +# German translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-28 04:06+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "Januar" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "Februar" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "M�rz" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "April" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "Mai" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "Juni" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "Juli" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "August" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "September" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "Oktober" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "November" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "Dezember" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "So" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "Mo" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "Di" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "Mi" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "Do" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "Fr" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "Sa" + +#~ msgid "Welcome to {package}!\n" +#~ msgstr "Willkommen bei {package}!\n" + +#~ msgid "Bye.\n" +#~ msgstr "Tsch�ss!\n" diff --git a/sample/simplecal/po/de_AT.po b/sample/simplecal/po/de_AT.po new file mode 100644 index 0000000..6faccbf --- /dev/null +++ b/sample/simplecal/po/de_AT.po @@ -0,0 +1,91 @@ +# German (Austria) translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-27 18:47+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "J�nner" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "Feber" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "" diff --git a/sample/simplecal/po/fr.po b/sample/simplecal/po/fr.po new file mode 100644 index 0000000..02ca346 --- /dev/null +++ b/sample/simplecal/po/fr.po @@ -0,0 +1,96 @@ +# French translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-28 04:07+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "janvier" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "f�vrier" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "mars" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "avril" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "mai" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "juin" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "juillet" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "ao�t" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "septembre" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "octobre" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "novembre" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "d�cembre" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "di" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "lu" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "ma" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "me" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "je" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "ve" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "sa" + +#~ msgid "Welcome to {package}!\n" +#~ msgstr "Bienvenu � {package}!\n" + +#~ msgid "Bye.\n" +#~ msgstr "� toute � l'heure!\n" diff --git a/sample/simplecal/po/ga.po b/sample/simplecal/po/ga.po new file mode 100644 index 0000000..a94350b --- /dev/null +++ b/sample/simplecal/po/ga.po @@ -0,0 +1,96 @@ +# Irish translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-28 04:10+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Irish \n" +"Language: ga\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "Ean�ir" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "Feabhra" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "M�rta" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "Aibre�n" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "M� na Bealtaine" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "Meith" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "I�il" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "L�nasa" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "Me�n F�mhair" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "Deireadh F�mhair" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "M� na Samhna" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "M� na Nollag" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "Domh" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "Luan" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "M�irt" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "C�ad" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "D�ar" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "Aoine" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "Sath" + +#~ msgid "Welcome to {package}!\n" +#~ msgstr "B�idh {package} agat agus f�ilte!\n" + +#~ msgid "Bye.\n" +#~ msgstr "Sl�n leat!\n" diff --git a/sample/simplecal/po/it.po b/sample/simplecal/po/it.po new file mode 100644 index 0000000..a199f65 --- /dev/null +++ b/sample/simplecal/po/it.po @@ -0,0 +1,96 @@ +# Italian translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-28 04:10+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "gennaio" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "febbraio" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "marzo" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "aprile" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "maggio" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "giugno" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "luglio" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "agosto" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "settembre" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "ottobre" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "novembre" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "dicembre" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "dom" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "lun" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "mar" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "mer" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "gio" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "ven" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "sab" + +#~ msgid "Welcome to {package}!\n" +#~ msgstr "Benvenuti in �{package}!\n" + +#~ msgid "Bye.\n" +#~ msgstr "Ciao!\n" diff --git a/sample/simplecal/po/nl.po b/sample/simplecal/po/nl.po new file mode 100644 index 0000000..6ef776b --- /dev/null +++ b/sample/simplecal/po/nl.po @@ -0,0 +1,96 @@ +# Dutch translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-28 04:08+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "januari" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "februari" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "maart" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "april" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "mei" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "juni" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "juli" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "augustus" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "september" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "oktober" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "november" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "december" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "zo" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "ma" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "di" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "wo" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "do" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "vr" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "za" + +#~ msgid "Welcome to {package}!\n" +#~ msgstr "Welkom bij {package}!\n" + +#~ msgid "Bye.\n" +#~ msgstr "Tot zo!\n" diff --git a/sample/simplecal/po/pt.po b/sample/simplecal/po/pt.po new file mode 100644 index 0000000..18f4dd9 --- /dev/null +++ b/sample/simplecal/po/pt.po @@ -0,0 +1,96 @@ +# Portuguese translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-28 04:24+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Portuguese \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "Janeiro" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "Fevereiro" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "Mar�o" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "Abril" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "Maio" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "Junho" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "Julho" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "Agosto" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "Setembro" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "Outubro" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "Novembro" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "Dezembro" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "Dom" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "Seg" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "Ter" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "Qua" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "Qui" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "Sex" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "S�b" + +#~ msgid "Welcome to {package}!\n" +#~ msgstr "Bem-vindo ao {package}!\n" + +#~ msgid "Bye.\n" +#~ msgstr "At� a vista!\n" diff --git a/sample/simplecal/po/pt_BR.po b/sample/simplecal/po/pt_BR.po new file mode 100644 index 0000000..08a9962 --- /dev/null +++ b/sample/simplecal/po/pt_BR.po @@ -0,0 +1,90 @@ +# Brazilian Portuguese translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-27 18:56+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "janeiro" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "fevereiro" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "mar�o" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "abril" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "maio" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "junho" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "julho" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "agosto" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "setembro" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "outubro" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "novembro" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "dezembro" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "Dom" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "Seg" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "Ter" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "Qua" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "Qui" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "Sex" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "S�b" diff --git a/sample/simplecal/po/ru.po b/sample/simplecal/po/ru.po new file mode 100644 index 0000000..db9980b --- /dev/null +++ b/sample/simplecal/po/ru.po @@ -0,0 +1,96 @@ +# Russian translations for SimpleCal. +# +msgid "" +msgstr "" +"Project-Id-Version: SimpleCal\n" +"Report-Msgid-Bugs-To: Edit the file PACAKGE to change this.\n" +"POT-Creation-Date: 2013-01-14 18:14+0200\n" +"PO-Revision-Date: 2003-07-28 04:21+0200\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-5\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../lib/SimpleCal.pm:26 +msgid "January" +msgstr "������" + +#: ../lib/SimpleCal.pm:28 +msgid "February" +msgstr "�������" + +#: ../lib/SimpleCal.pm:30 +msgid "March" +msgstr "�����" + +#: ../lib/SimpleCal.pm:32 +msgid "April" +msgstr "������" + +#: ../lib/SimpleCal.pm:34 +msgid "May" +msgstr "���" + +#: ../lib/SimpleCal.pm:36 +msgid "June" +msgstr "����" + +#: ../lib/SimpleCal.pm:38 +msgid "July" +msgstr "����" + +#: ../lib/SimpleCal.pm:40 +msgid "August" +msgstr "�������" + +#: ../lib/SimpleCal.pm:42 +msgid "September" +msgstr "��������" + +#: ../lib/SimpleCal.pm:44 +msgid "October" +msgstr "�������" + +#: ../lib/SimpleCal.pm:46 +msgid "November" +msgstr "������" + +#: ../lib/SimpleCal.pm:48 +msgid "December" +msgstr "�������" + +#: ../lib/SimpleCal.pm:70 +msgid "Sun" +msgstr "���" + +#: ../lib/SimpleCal.pm:71 +msgid "Mon" +msgstr "���" + +#: ../lib/SimpleCal.pm:72 +msgid "Tue" +msgstr "���" + +#: ../lib/SimpleCal.pm:73 +msgid "Wed" +msgstr "���" + +#: ../lib/SimpleCal.pm:74 +msgid "Thu" +msgstr "���" + +#: ../lib/SimpleCal.pm:75 +msgid "Fri" +msgstr "���" + +#: ../lib/SimpleCal.pm:76 +msgid "Sat" +msgstr "���" + +#~ msgid "Welcome to {package}!\n" +#~ msgstr "����� ���������� � {package}!\n" + +#~ msgid "Bye.\n" +#~ msgstr "����!\n" diff --git a/test.pl b/test.pl new file mode 100755 index 0000000..d60e180 --- /dev/null +++ b/test.pl @@ -0,0 +1,151 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 + +# Portable character conversion for Perl. +# Copyright (C) 2002-2017 Guido Flohr , +# all rights reserved. + +# 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 3 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, see . + +# This is a safe wrapper for systems that lack a POSIX shell or have +# a too low limit on the length of the command line. + +use strict; +use File::Basename; +use Test::Harness; +use File::Spec; + +sub test_harness; + +my $here = dirname ($0); +my $test_dir = $here . '/tests'; +my @lib_dirs = ($here . '/blib/lib', $here . '/blib/arch'); +local *DIR; +opendir DIR, $test_dir or die "cannot open test directory '$test_dir': $!"; +@ARGV = sort map $test_dir . '/' . $_, grep /\.t$/, readdir DIR; +closedir DIR; + +eval { + require Encode; +}; + +unless ($@) { + print "# Encode revision used is $Encode::VERSION.\n"; +} + +test_harness ($ENV{TEST_HARNESS} || 0, @lib_dirs); + +sub test_harness +{ + $Test::Harness::verbose = shift; + + local @INC = @INC; + unshift @INC, map { File::Spec->rel2abs($_) } @_; + my $name = $0; + $name =~ s,test\.pl$,xs_disabled,; + local *HANDLE; + open HANDLE, "<$name" or die "cannot open '$name': $!"; + my $xs_disabled = ; + close HANDLE; + + eval { + require POSIX; + POSIX::setlocale(POSIX::LC_ALL()); + }; + my $has_locales = !$@; + if (!$has_locales) { + $xs_disabled = 1; + print < ''); + unless ($has_de_locale) { + require Locale::Util; + + $has_de_locale = + Locale::Util::set_locale (POSIX::LC_ALL(), + 'de'); + undef $has_de_locale + unless ($has_de_locale + && $has_de_locale =~ /(?:germany|de)/i); + } + unless ($has_de_locale) { + $xs_disabled = 1; + print < 4 } + +require Locale::Recode; + +sub compare_internal; + +my $text = 'Perl'; +my $expect = [ unpack 'C*', $text ]; +my $cd = Locale::Recode->new (from => 'ISO-8859-1', + to => 'INTERNAL'); + +ok !$cd->getError; + +my $result = $text; +ok $cd->recode ($result) && compare_internal $expect => $result; + +# Aliases! +$cd = Locale::Recode->new (from => 'lAtIn2', + to => 'l3'); + +ok !$cd->getError; + +$result = $expect = $text; +ok $cd->recode ($result) && $result eq $expect; + +sub compare_internal +{ + my ($bonny, $clyde) = @_; + + return unless defined $bonny; + return unless defined $clyde; + return unless 'ARRAY' eq ref $bonny; + return unless 'ARRAY' eq ref $clyde; + + return unless @$bonny == @$clyde; + + for (my $i = 0; $i < @$bonny; ++$i) { + return unless $bonny->[$i] == $clyde->[$i]; + } + + return 1; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +tab-width: 4 +End: + diff --git a/tests/02asmo_449.t b/tests/02asmo_449.t new file mode 100644 index 0000000..c969740 --- /dev/null +++ b/tests/02asmo_449.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ASMO_449', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ASMO_449', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ASMO_449'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ASMO_449', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x00a4 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x060c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x061b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x061f +0x40 0x0040 +0x41 0x0621 +0x42 0x0622 +0x43 0x0623 +0x44 0x0624 +0x45 0x0625 +0x46 0x0626 +0x47 0x0627 +0x48 0x0628 +0x49 0x0629 +0x4a 0x062a +0x4b 0x062b +0x4c 0x062c +0x4d 0x062d +0x4e 0x062e +0x4f 0x062f +0x50 0x0630 +0x51 0x0631 +0x52 0x0632 +0x53 0x0633 +0x54 0x0634 +0x55 0x0635 +0x56 0x0636 +0x57 0x0637 +0x58 0x0638 +0x59 0x0639 +0x5a 0x063a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0640 +0x61 0x0641 +0x62 0x0642 +0x63 0x0643 +0x64 0x0644 +0x65 0x0645 +0x66 0x0646 +0x67 0x0647 +0x68 0x0648 +0x69 0x0649 +0x6a 0x064a +0x6b 0x064b +0x6c 0x064c +0x6d 0x064d +0x6e 0x064e +0x6f 0x064f +0x70 0x0650 +0x71 0x0651 +0x72 0x0652 +0x7b 0xfffd +0x7b 0xfffd +0x7b 0xfffd +0x7b 0xfffd +0x7b 0xfffd +0x7b 0xfffd +0x7b 0xfffd +0x7b 0xfffd +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x203e +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02atari-st-euro.t b/tests/02atari-st-euro.t new file mode 100644 index 0000000..67be649 --- /dev/null +++ b/tests/02atari-st-euro.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ATARI-ST-EURO', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ATARI-ST-EURO', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ATARI-ST-EURO'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ATARI-ST', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x00e0 +0x86 0x00e5 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00ef +0x8c 0x00ee +0x8d 0x00ec +0x8e 0x00c4 +0x8f 0x00c5 +0x90 0x00c9 +0x91 0x00e6 +0x92 0x00c6 +0x93 0x00f4 +0x94 0x00f6 +0x95 0x00f2 +0x96 0x00fb +0x97 0x00f9 +0x98 0x00ff +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x00a2 +0x9c 0x00a3 +0x9d 0x00a5 +0x9e 0x00df +0x9f 0x0192 +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00f1 +0xa5 0x00d1 +0xa6 0x00aa +0xa7 0x00ba +0xa8 0x00bf +0xa9 0x2310 +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x00e3 +0xb1 0x00f5 +0xb2 0x00d8 +0xb3 0x00f8 +0xb4 0x0153 +0xb5 0x0152 +0xb6 0x00c0 +0xb7 0x00c3 +0xb8 0x00d5 +0xb9 0x00a8 +0xba 0x00b4 +0xbb 0x2020 +0xbc 0x00b6 +0xbd 0x00a9 +0xbe 0x00ae +0xbf 0x2122 +0xc0 0x0133 +0xc1 0x0132 +0xc2 0x05d0 +0xc3 0x05d1 +0xc4 0x05d2 +0xc5 0x05d3 +0xc6 0x05d4 +0xc7 0x05d5 +0xc8 0x05d6 +0xc9 0x05d7 +0xca 0x05d8 +0xcb 0x05d9 +0xcc 0x05db +0xcd 0x05dc +0xce 0x05de +0xcf 0x05e0 +0xd0 0x05e1 +0xd1 0x05e2 +0xd2 0x05e4 +0xd3 0x05e6 +0xd4 0x05e7 +0xd5 0x05e8 +0xd6 0x05e9 +0xd7 0x05ea +0xd8 0x05df +0xd9 0x05da +0xda 0x05dd +0xdb 0x05e3 +0xdc 0x05e5 +0xdd 0x00a7 +0xde 0x20ac +0xdf 0x221e +0xe0 0x03b1 +0xe1 0x03b2 +0xe2 0x0393 +0xe3 0x03c0 +0xe4 0x03a3 +0xe5 0x03c3 +0xe6 0x00b5 +0xe7 0x03c4 +0xe8 0x03a6 +0xe9 0x03b8 +0xea 0x03a9 +0xeb 0x03b4 +0xec 0x222e +0xed 0x03c6 +0xee 0x2208 +0xef 0x220f +0xf0 0x2261 +0xf1 0x00b1 +0xf2 0x2265 +0xf3 0x2264 +0xf4 0x2320 +0xf5 0x2321 +0xf6 0x00f7 +0xf7 0x2248 +0xf8 0x00b0 +0xf9 0x2022 +0xfa 0x00b7 +0xfb 0x221a +0xfc 0x207f +0xfd 0x00b2 +0xfe 0x00b3 +0xff 0x00af diff --git a/tests/02atari-st.t b/tests/02atari-st.t new file mode 100644 index 0000000..40e85ae --- /dev/null +++ b/tests/02atari-st.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ATARI-ST', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ATARI-ST', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ATARI-ST'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ATARI-ST', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x00e0 +0x86 0x00e5 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00ef +0x8c 0x00ee +0x8d 0x00ec +0x8e 0x00c4 +0x8f 0x00c5 +0x90 0x00c9 +0x91 0x00e6 +0x92 0x00c6 +0x93 0x00f4 +0x94 0x00f6 +0x95 0x00f2 +0x96 0x00fb +0x97 0x00f9 +0x98 0x00ff +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x00a2 +0x9c 0x00a3 +0x9d 0x00a5 +0x9e 0x00df +0x9f 0x0192 +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00f1 +0xa5 0x00d1 +0xa6 0x00aa +0xa7 0x00ba +0xa8 0x00bf +0xa9 0x2310 +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x00e3 +0xb1 0x00f5 +0xb2 0x00d8 +0xb3 0x00f8 +0xb4 0x0153 +0xb5 0x0152 +0xb6 0x00c0 +0xb7 0x00c3 +0xb8 0x00d5 +0xb9 0x00a8 +0xba 0x00b4 +0xbb 0x2020 +0xbc 0x00b6 +0xbd 0x00a9 +0xbe 0x00ae +0xbf 0x2122 +0xc0 0x0133 +0xc1 0x0132 +0xc2 0x05d0 +0xc3 0x05d1 +0xc4 0x05d2 +0xc5 0x05d3 +0xc6 0x05d4 +0xc7 0x05d5 +0xc8 0x05d6 +0xc9 0x05d7 +0xca 0x05d8 +0xcb 0x05d9 +0xcc 0x05db +0xcd 0x05dc +0xce 0x05de +0xcf 0x05e0 +0xd0 0x05e1 +0xd1 0x05e2 +0xd2 0x05e4 +0xd3 0x05e6 +0xd4 0x05e7 +0xd5 0x05e8 +0xd6 0x05e9 +0xd7 0x05ea +0xd8 0x05df +0xd9 0x05da +0xda 0x05dd +0xdb 0x05e3 +0xdc 0x05e5 +0xdd 0x00a7 +0xde 0x2038 +0xdf 0x221e +0xe0 0x03b1 +0xe1 0x03b2 +0xe2 0x0393 +0xe3 0x03c0 +0xe4 0x03a3 +0xe5 0x03c3 +0xe6 0x00b5 +0xe7 0x03c4 +0xe8 0x03a6 +0xe9 0x03b8 +0xea 0x03a9 +0xeb 0x03b4 +0xec 0x222e +0xed 0x03c6 +0xee 0x2208 +0xef 0x220f +0xf0 0x2261 +0xf1 0x00b1 +0xf2 0x2265 +0xf3 0x2264 +0xf4 0x2320 +0xf5 0x2321 +0xf6 0x00f7 +0xf7 0x2248 +0xf8 0x00b0 +0xf9 0x2022 +0xfa 0x00b7 +0xfb 0x221a +0xfc 0x207f +0xfd 0x00b2 +0xfe 0x00b3 +0xff 0x00af diff --git a/tests/02cp10007.t b/tests/02cp10007.t new file mode 100644 index 0000000..16f1003 --- /dev/null +++ b/tests/02cp10007.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CP10007', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CP10007', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP10007'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP10007', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0410 +0x81 0x0411 +0x82 0x0412 +0x83 0x0413 +0x84 0x0414 +0x85 0x0415 +0x86 0x0416 +0x87 0x0417 +0x88 0x0418 +0x89 0x0419 +0x8a 0x041a +0x8b 0x041b +0x8c 0x041c +0x8d 0x041d +0x8e 0x041e +0x8f 0x041f +0x90 0x0420 +0x91 0x0421 +0x92 0x0422 +0x93 0x0423 +0x94 0x0424 +0x95 0x0425 +0x96 0x0426 +0x97 0x0427 +0x98 0x0428 +0x99 0x0429 +0x9a 0x042a +0x9b 0x042b +0x9c 0x042c +0x9d 0x042d +0x9e 0x042e +0x9f 0x042f +0xa0 0x2020 +0xa1 0x00b0 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x0406 +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x0402 +0xac 0x0452 +0xad 0x2260 +0xae 0x0403 +0xaf 0x0453 +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x0456 +0xb5 0x00b5 +0xb6 0x0491 +0xb7 0x0408 +0xb8 0x0404 +0xb9 0x0454 +0xba 0x0407 +0xbb 0x0457 +0xbc 0x0409 +0xbd 0x0459 +0xbe 0x040a +0xbf 0x045a +0xc0 0x0458 +0xc1 0x0405 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x2206 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x040b +0xcc 0x045b +0xcd 0x040c +0xce 0x045c +0xcf 0x0455 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x201e +0xd8 0x040e +0xd9 0x045e +0xda 0x040f +0xdb 0x045f +0xdc 0x2116 +0xdd 0x0401 +0xde 0x0451 +0xdf 0x044f +0xe0 0x0430 +0xe1 0x0431 +0xe2 0x0432 +0xe3 0x0433 +0xe4 0x0434 +0xe5 0x0435 +0xe6 0x0436 +0xe7 0x0437 +0xe8 0x0438 +0xe9 0x0439 +0xea 0x043a +0xeb 0x043b +0xec 0x043c +0xed 0x043d +0xee 0x043e +0xef 0x043f +0xf0 0x0440 +0xf1 0x0441 +0xf2 0x0442 +0xf3 0x0443 +0xf4 0x0444 +0xf5 0x0445 +0xf6 0x0446 +0xf7 0x0447 +0xf8 0x0448 +0xf9 0x0449 +0xfa 0x044a +0xfb 0x044b +0xfc 0x044c +0xfd 0x044d +0xfe 0x044e +0xff 0x00a4 diff --git a/tests/02cp1250.t b/tests/02cp1250.t new file mode 100644 index 0000000..598ac7f --- /dev/null +++ b/tests/02cp1250.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CP1250', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CP1250', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1250'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1250', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x20ac +0x82 0xfffd +0x82 0x201a +0x84 0xfffd +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x89 0xfffd +0x89 0x2030 +0x8a 0x0160 +0x8b 0x2039 +0x8c 0x015a +0x8d 0x0164 +0x8e 0x017d +0x8f 0x0179 +0x91 0xfffd +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x99 0xfffd +0x99 0x2122 +0x9a 0x0161 +0x9b 0x203a +0x9c 0x015b +0x9d 0x0165 +0x9e 0x017e +0x9f 0x017a +0xa0 0x00a0 +0xa1 0x02c7 +0xa2 0x02d8 +0xa3 0x0141 +0xa4 0x00a4 +0xa5 0x0104 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x015e +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x017b +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x02db +0xb3 0x0142 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x0105 +0xba 0x015f +0xbb 0x00bb +0xbc 0x013d +0xbd 0x02dd +0xbe 0x013e +0xbf 0x017c +0xc0 0x0154 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x0102 +0xc4 0x00c4 +0xc5 0x0139 +0xc6 0x0106 +0xc7 0x00c7 +0xc8 0x010c +0xc9 0x00c9 +0xca 0x0118 +0xcb 0x00cb +0xcc 0x011a +0xcd 0x00cd +0xce 0x00ce +0xcf 0x010e +0xd0 0x0110 +0xd1 0x0143 +0xd2 0x0147 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x0150 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x0158 +0xd9 0x016e +0xda 0x00da +0xdb 0x0170 +0xdc 0x00dc +0xdd 0x00dd +0xde 0x0162 +0xdf 0x00df +0xe0 0x0155 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x0103 +0xe4 0x00e4 +0xe5 0x013a +0xe6 0x0107 +0xe7 0x00e7 +0xe8 0x010d +0xe9 0x00e9 +0xea 0x0119 +0xeb 0x00eb +0xec 0x011b +0xed 0x00ed +0xee 0x00ee +0xef 0x010f +0xf0 0x0111 +0xf1 0x0144 +0xf2 0x0148 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x0151 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x0159 +0xf9 0x016f +0xfa 0x00fa +0xfb 0x0171 +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x0163 +0xff 0x02d9 diff --git a/tests/02cp1251.t b/tests/02cp1251.t new file mode 100644 index 0000000..a17217b --- /dev/null +++ b/tests/02cp1251.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CP1251', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CP1251', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1251'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1251', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0402 +0x81 0x0403 +0x82 0x201a +0x83 0x0453 +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x88 0x20ac +0x89 0x2030 +0x8a 0x0409 +0x8b 0x2039 +0x8c 0x040a +0x8d 0x040c +0x8e 0x040b +0x8f 0x040f +0x90 0x0452 +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x99 0xfffd +0x99 0x2122 +0x9a 0x0459 +0x9b 0x203a +0x9c 0x045a +0x9d 0x045c +0x9e 0x045b +0x9f 0x045f +0xa0 0x00a0 +0xa1 0x040e +0xa2 0x045e +0xa3 0x0408 +0xa4 0x00a4 +0xa5 0x0490 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x0401 +0xa9 0x00a9 +0xaa 0x0404 +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x0407 +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x0406 +0xb3 0x0456 +0xb4 0x0491 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x0451 +0xb9 0x2116 +0xba 0x0454 +0xbb 0x00bb +0xbc 0x0458 +0xbd 0x0405 +0xbe 0x0455 +0xbf 0x0457 +0xc0 0x0410 +0xc1 0x0411 +0xc2 0x0412 +0xc3 0x0413 +0xc4 0x0414 +0xc5 0x0415 +0xc6 0x0416 +0xc7 0x0417 +0xc8 0x0418 +0xc9 0x0419 +0xca 0x041a +0xcb 0x041b +0xcc 0x041c +0xcd 0x041d +0xce 0x041e +0xcf 0x041f +0xd0 0x0420 +0xd1 0x0421 +0xd2 0x0422 +0xd3 0x0423 +0xd4 0x0424 +0xd5 0x0425 +0xd6 0x0426 +0xd7 0x0427 +0xd8 0x0428 +0xd9 0x0429 +0xda 0x042a +0xdb 0x042b +0xdc 0x042c +0xdd 0x042d +0xde 0x042e +0xdf 0x042f +0xe0 0x0430 +0xe1 0x0431 +0xe2 0x0432 +0xe3 0x0433 +0xe4 0x0434 +0xe5 0x0435 +0xe6 0x0436 +0xe7 0x0437 +0xe8 0x0438 +0xe9 0x0439 +0xea 0x043a +0xeb 0x043b +0xec 0x043c +0xed 0x043d +0xee 0x043e +0xef 0x043f +0xf0 0x0440 +0xf1 0x0441 +0xf2 0x0442 +0xf3 0x0443 +0xf4 0x0444 +0xf5 0x0445 +0xf6 0x0446 +0xf7 0x0447 +0xf8 0x0448 +0xf9 0x0449 +0xfa 0x044a +0xfb 0x044b +0xfc 0x044c +0xfd 0x044d +0xfe 0x044e +0xff 0x044f diff --git a/tests/02cp1252.t b/tests/02cp1252.t new file mode 100644 index 0000000..0d2e6dc --- /dev/null +++ b/tests/02cp1252.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CP1252', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CP1252', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1252'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1252', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x20ac +0x82 0xfffd +0x82 0x201a +0x83 0x0192 +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x88 0x02c6 +0x89 0x2030 +0x8a 0x0160 +0x8b 0x2039 +0x8c 0x0152 +0x8e 0xfffd +0x8e 0x017d +0x91 0xfffd +0x91 0xfffd +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x98 0x02dc +0x99 0x2122 +0x9a 0x0161 +0x9b 0x203a +0x9c 0x0153 +0x9e 0xfffd +0x9e 0x017e +0x9f 0x0178 +0xa0 0x00a0 +0xa1 0x00a1 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x00a5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x00aa +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x00b9 +0xba 0x00ba +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xbf 0x00bf +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd0 0x00d0 +0xd1 0x00d1 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x00d8 +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x00dd +0xde 0x00de +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x00f0 +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x00fe +0xff 0x00ff diff --git a/tests/02cp1253.t b/tests/02cp1253.t new file mode 100644 index 0000000..bbeaed4 --- /dev/null +++ b/tests/02cp1253.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CP1253', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CP1253', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1253'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1253', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x20ac +0x82 0xfffd +0x82 0x201a +0x83 0x0192 +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x89 0xfffd +0x89 0x2030 +0x8b 0xfffd +0x8b 0x2039 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x99 0xfffd +0x99 0x2122 +0x9b 0xfffd +0x9b 0x203a +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0x00a0 +0xa1 0x0385 +0xa2 0x0386 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x00a5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xab 0xfffd +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x2015 +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x0384 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x0388 +0xb9 0x0389 +0xba 0x038a +0xbb 0x00bb +0xbc 0x038c +0xbd 0x00bd +0xbe 0x038e +0xbf 0x038f +0xc0 0x0390 +0xc1 0x0391 +0xc2 0x0392 +0xc3 0x0393 +0xc4 0x0394 +0xc5 0x0395 +0xc6 0x0396 +0xc7 0x0397 +0xc8 0x0398 +0xc9 0x0399 +0xca 0x039a +0xcb 0x039b +0xcc 0x039c +0xcd 0x039d +0xce 0x039e +0xcf 0x039f +0xd0 0x03a0 +0xd1 0x03a1 +0xd3 0xfffd +0xd3 0x03a3 +0xd4 0x03a4 +0xd5 0x03a5 +0xd6 0x03a6 +0xd7 0x03a7 +0xd8 0x03a8 +0xd9 0x03a9 +0xda 0x03aa +0xdb 0x03ab +0xdc 0x03ac +0xdd 0x03ad +0xde 0x03ae +0xdf 0x03af +0xe0 0x03b0 +0xe1 0x03b1 +0xe2 0x03b2 +0xe3 0x03b3 +0xe4 0x03b4 +0xe5 0x03b5 +0xe6 0x03b6 +0xe7 0x03b7 +0xe8 0x03b8 +0xe9 0x03b9 +0xea 0x03ba +0xeb 0x03bb +0xec 0x03bc +0xed 0x03bd +0xee 0x03be +0xef 0x03bf +0xf0 0x03c0 +0xf1 0x03c1 +0xf2 0x03c2 +0xf3 0x03c3 +0xf4 0x03c4 +0xf5 0x03c5 +0xf6 0x03c6 +0xf7 0x03c7 +0xf8 0x03c8 +0xf9 0x03c9 +0xfa 0x03ca +0xfb 0x03cb +0xfc 0x03cc +0xfd 0x03cd +0xfe 0x03ce +0xff 0xfffd diff --git a/tests/02cp1254.t b/tests/02cp1254.t new file mode 100644 index 0000000..40c9a36 --- /dev/null +++ b/tests/02cp1254.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CP1254', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CP1254', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1254'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1254', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x20ac +0x82 0xfffd +0x82 0x201a +0x83 0x0192 +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x88 0x02c6 +0x89 0x2030 +0x8a 0x0160 +0x8b 0x2039 +0x8c 0x0152 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x98 0x02dc +0x99 0x2122 +0x9a 0x0161 +0x9b 0x203a +0x9c 0x0153 +0x9f 0xfffd +0x9f 0xfffd +0x9f 0x0178 +0xa0 0x00a0 +0xa1 0x00a1 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x00a5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x00aa +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x00b9 +0xba 0x00ba +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xbf 0x00bf +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd0 0x011e +0xd1 0x00d1 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x00d8 +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x0130 +0xde 0x015e +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x011f +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x0131 +0xfe 0x015f +0xff 0x00ff diff --git a/tests/02cp1256.t b/tests/02cp1256.t new file mode 100644 index 0000000..83564a4 --- /dev/null +++ b/tests/02cp1256.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CP1256', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CP1256', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1256'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1256', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x20ac +0x81 0x067e +0x82 0x201a +0x83 0x0192 +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x88 0x02c6 +0x89 0x2030 +0x8a 0x0679 +0x8b 0x2039 +0x8c 0x0152 +0x8d 0x0686 +0x8e 0x0698 +0x8f 0x0688 +0x90 0x06af +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x98 0x06a9 +0x99 0x2122 +0x9a 0x0691 +0x9b 0x203a +0x9c 0x0153 +0x9d 0x200c +0x9e 0x200d +0x9f 0x06ba +0xa0 0x00a0 +0xa1 0x060c +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x00a5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x06be +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x00b9 +0xba 0x061b +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xbf 0x061f +0xc0 0x06c1 +0xc1 0x0621 +0xc2 0x0622 +0xc3 0x0623 +0xc4 0x0624 +0xc5 0x0625 +0xc6 0x0626 +0xc7 0x0627 +0xc8 0x0628 +0xc9 0x0629 +0xca 0x062a +0xcb 0x062b +0xcc 0x062c +0xcd 0x062d +0xce 0x062e +0xcf 0x062f +0xd0 0x0630 +0xd1 0x0631 +0xd2 0x0632 +0xd3 0x0633 +0xd4 0x0634 +0xd5 0x0635 +0xd6 0x0636 +0xd7 0x00d7 +0xd8 0x0637 +0xd9 0x0638 +0xda 0x0639 +0xdb 0x063a +0xdc 0x0640 +0xdd 0x0641 +0xde 0x0642 +0xdf 0x0643 +0xe0 0x00e0 +0xe1 0x0644 +0xe2 0x00e2 +0xe3 0x0645 +0xe4 0x0646 +0xe5 0x0647 +0xe6 0x0648 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x0649 +0xed 0x064a +0xee 0x00ee +0xef 0x00ef +0xf0 0x064b +0xf1 0x064c +0xf2 0x064d +0xf3 0x064e +0xf4 0x00f4 +0xf5 0x064f +0xf6 0x0650 +0xf7 0x00f7 +0xf8 0x0651 +0xf9 0x00f9 +0xfa 0x0652 +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x200e +0xfe 0x200f +0xff 0x06d2 diff --git a/tests/02cp1257.t b/tests/02cp1257.t new file mode 100644 index 0000000..1fa151a --- /dev/null +++ b/tests/02cp1257.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CP1257', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CP1257', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1257'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CP1257', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x20ac +0x82 0xfffd +0x82 0x201a +0x84 0xfffd +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x89 0xfffd +0x89 0x2030 +0x8b 0xfffd +0x8b 0x2039 +0x8d 0xfffd +0x8d 0x00a8 +0x8e 0x02c7 +0x8f 0x00b8 +0x91 0xfffd +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x99 0xfffd +0x99 0x2122 +0x9b 0xfffd +0x9b 0x203a +0x9d 0xfffd +0x9d 0x00af +0x9e 0x02db +0xa0 0xfffd +0xa0 0x00a0 +0xa2 0xfffd +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa6 0xfffd +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00d8 +0xa9 0x00a9 +0xaa 0x0156 +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00c6 +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00f8 +0xb9 0x00b9 +0xba 0x0157 +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xbf 0x00e6 +0xc0 0x0104 +0xc1 0x012e +0xc2 0x0100 +0xc3 0x0106 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x0118 +0xc7 0x0112 +0xc8 0x010c +0xc9 0x00c9 +0xca 0x0179 +0xcb 0x0116 +0xcc 0x0122 +0xcd 0x0136 +0xce 0x012a +0xcf 0x013b +0xd0 0x0160 +0xd1 0x0143 +0xd2 0x0145 +0xd3 0x00d3 +0xd4 0x014c +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x0172 +0xd9 0x0141 +0xda 0x015a +0xdb 0x016a +0xdc 0x00dc +0xdd 0x017b +0xde 0x017d +0xdf 0x00df +0xe0 0x0105 +0xe1 0x012f +0xe2 0x0101 +0xe3 0x0107 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x0119 +0xe7 0x0113 +0xe8 0x010d +0xe9 0x00e9 +0xea 0x017a +0xeb 0x0117 +0xec 0x0123 +0xed 0x0137 +0xee 0x012b +0xef 0x013c +0xf0 0x0161 +0xf1 0x0144 +0xf2 0x0146 +0xf3 0x00f3 +0xf4 0x014d +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x0173 +0xf9 0x0142 +0xfa 0x015b +0xfb 0x016b +0xfc 0x00fc +0xfd 0x017c +0xfe 0x017e +0xff 0x02d9 diff --git a/tests/02csn_369103.t b/tests/02csn_369103.t new file mode 100644 index 0000000..6722cb6 --- /dev/null +++ b/tests/02csn_369103.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CSN_369103', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CSN_369103', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CSN_369103'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CSN_369103', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x00a4 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x0104 +0xa2 0x02d8 +0xa3 0x0141 +0xa4 0x0024 +0xa5 0x013d +0xa6 0x015a +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x0160 +0xaa 0x015e +0xab 0x0164 +0xac 0x0179 +0xad 0x00ad +0xae 0x017d +0xaf 0x017b +0xb0 0x00b0 +0xb1 0x0105 +0xb2 0x02db +0xb3 0x0142 +0xb4 0x00b4 +0xb5 0x013e +0xb6 0x015b +0xb7 0x02c7 +0xb8 0x00b8 +0xb9 0x0161 +0xba 0x015f +0xbb 0x0165 +0xbc 0x017a +0xbd 0x02dd +0xbe 0x017e +0xbf 0x017c +0xc0 0x0154 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x0102 +0xc4 0x00c4 +0xc5 0x0139 +0xc6 0x0106 +0xc7 0x00c7 +0xc8 0x010c +0xc9 0x00c9 +0xca 0x0118 +0xcb 0x00cb +0xcc 0x011a +0xcd 0x00cd +0xce 0x00ce +0xcf 0x010e +0xd0 0x0110 +0xd1 0x0143 +0xd2 0x0147 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x0150 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x0158 +0xd9 0x016e +0xda 0x00da +0xdb 0x0170 +0xdc 0x00dc +0xdd 0x00dd +0xde 0x0162 +0xdf 0x00df +0xe0 0x0155 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x0103 +0xe4 0x00e4 +0xe5 0x013a +0xe6 0x0107 +0xe7 0x00e7 +0xe8 0x010d +0xe9 0x00e9 +0xea 0x0119 +0xeb 0x00eb +0xec 0x011b +0xed 0x00ed +0xee 0x00ee +0xef 0x010f +0xf0 0x0111 +0xf1 0x0144 +0xf2 0x0148 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x0151 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x0159 +0xf9 0x016f +0xfa 0x00fa +0xfb 0x0171 +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x0163 +0xff 0x02d9 diff --git a/tests/02cwi.t b/tests/02cwi.t new file mode 100644 index 0000000..5642f4e --- /dev/null +++ b/tests/02cwi.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'CWI', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'CWI', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CWI'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'CWI', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x00e0 +0x86 0x00e5 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00ef +0x8c 0x00ee +0x8d 0x00cd +0x8e 0x00c4 +0x8f 0x00c1 +0x90 0x00c9 +0x91 0x00e6 +0x92 0x00c6 +0x93 0x0151 +0x94 0x00f6 +0x95 0x00d3 +0x96 0x0171 +0x97 0x00da +0x98 0x0170 +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x00a2 +0x9c 0x00a3 +0x9d 0x00a5 +0x9e 0x20a7 +0x9f 0xe01f +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00f1 +0xa5 0x00d1 +0xa6 0x00aa +0xa7 0x0150 +0xa8 0x00bf +0xa9 0x2310 +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x2561 +0xb6 0x2562 +0xb7 0x2556 +0xb8 0x2555 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x255c +0xbe 0x255b +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x255e +0xc7 0x255f +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x2567 +0xd0 0x2568 +0xd1 0x2564 +0xd2 0x2565 +0xd3 0x2559 +0xd4 0x2558 +0xd5 0x2552 +0xd6 0x2553 +0xd7 0x256b +0xd8 0x256a +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x258c +0xde 0x2590 +0xdf 0x2580 +0xe0 0x03b1 +0xe1 0x03b2 +0xe2 0x0393 +0xe3 0x03c0 +0xe4 0x03a3 +0xe5 0x03c3 +0xe6 0x03bc +0xe7 0x03c4 +0xe8 0x03a6 +0xe9 0x0398 +0xea 0x03a9 +0xeb 0x03b4 +0xec 0x221e +0xed 0x2205 +0xee 0x03b5 +0xef 0x2229 +0xf0 0x2261 +0xf1 0x00b1 +0xf2 0x2265 +0xf3 0x2264 +0xf4 0x2320 +0xf5 0x2321 +0xf6 0x00f7 +0xf7 0x2248 +0xf8 0x2218 +0xf9 0x00b7 +0xfa 0x2022 +0xfb 0x221a +0xfc 0x207f +0xfd 0x00b2 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02dec-mcs.t b/tests/02dec-mcs.t new file mode 100644 index 0000000..867ef92 --- /dev/null +++ b/tests/02dec-mcs.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'DEC-MCS', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'DEC-MCS', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'DEC-MCS'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'DEC-MCS', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa1 0xfffd +0xa1 0x00a1 +0xa2 0x00a2 +0xa3 0x00a3 +0xa5 0xfffd +0xa5 0x00a5 +0xa7 0xfffd +0xa7 0x00a7 +0xa8 0x00a4 +0xa9 0x00a9 +0xaa 0x00aa +0xab 0x00ab +0xb0 0xfffd +0xb0 0xfffd +0xb0 0xfffd +0xb0 0xfffd +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb5 0xfffd +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb9 0xfffd +0xb9 0x00b9 +0xba 0x00ba +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbf 0xfffd +0xbf 0x00bf +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd1 0xfffd +0xd1 0x00d1 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x0152 +0xd8 0x00d8 +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x0178 +0xdf 0xfffd +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf1 0xfffd +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x0153 +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x00ff +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02ebcdic-at-de-a.t b/tests/02ebcdic-at-de-a.t new file mode 100644 index 0000000..2405dbb --- /dev/null +++ b/tests/02ebcdic-at-de-a.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-AT-DE-A', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-AT-DE-A', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-AT-DE-A'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-AT-DE-A', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00f6 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x00fc +0x5b 0x00dc +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00df +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0x003a +0x7b 0x00c4 +0x7c 0x00d6 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x00e4 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-at-de.t b/tests/02ebcdic-at-de.t new file mode 100644 index 0000000..bfb6518 --- /dev/null +++ b/tests/02ebcdic-at-de.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-AT-DE', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-AT-DE', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-AT-DE'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-AT-DE', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00c4 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x00dc +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00f6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x00a7 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00df +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00e4 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x00fc +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x00d6 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-ca-fr.t b/tests/02ebcdic-ca-fr.t new file mode 100644 index 0000000..1eb0097 --- /dev/null +++ b/tests/02ebcdic-ca-fr.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-CA-FR', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-CA-FR', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-CA-FR'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-CA-FR', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x42 0xfffd +0x42 0x00e2 +0x48 0xfffd +0x48 0xfffd +0x48 0xfffd +0x48 0xfffd +0x48 0xfffd +0x48 0x00e7 +0x4a 0xfffd +0x4a 0x00e0 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x52 0xfffd +0x52 0x00ea +0x53 0x00eb +0x56 0xfffd +0x56 0xfffd +0x56 0x00ee +0x57 0x00ef +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x00b4 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x64 0xfffd +0x64 0x00c0 +0x68 0xfffd +0x68 0xfffd +0x68 0xfffd +0x68 0x00c7 +0x6a 0xfffd +0x6a 0x00f9 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x71 0xfffd +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x75 0xfffd +0x75 0x00ce +0x76 0x00cf +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00a8 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00e9 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xcb 0xfffd +0xcb 0x00f4 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x00e8 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xdb 0xfffd +0xdb 0x00fb +0xdc 0x00fc +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x00b8 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xeb 0xfffd +0xeb 0x00d4 +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfb 0xfffd +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-dk-no-a.t b/tests/02ebcdic-dk-no-a.t new file mode 100644 index 0000000..1ec1da4 --- /dev/null +++ b/tests/02ebcdic-dk-no-a.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-DK-NO-A', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-DK-NO-A', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-DK-NO-A'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-DK-NO-A', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00f8 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x00e5 +0x5b 0x00c5 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0x003a +0x7b 0x00c6 +0x7c 0x00d8 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x00e6 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-dk-no.t b/tests/02ebcdic-dk-no.t new file mode 100644 index 0000000..b94f630 --- /dev/null +++ b/tests/02ebcdic-dk-no.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-DK-NO', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-DK-NO', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-DK-NO'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-DK-NO', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x0023 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x00a4 +0x5b 0x00c5 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00f8 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x00c6 +0x7c 0x00d8 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00fc +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00e6 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x00e5 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x005c +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-es-a.t b/tests/02ebcdic-es-a.t new file mode 100644 index 0000000..6ff5332 --- /dev/null +++ b/tests/02ebcdic-es-a.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-ES-A', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-ES-A', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-ES-A'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-ES-A', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00a2 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x0021 +0x5b 0x20a7 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0x003a +0x7b 0x00d1 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x00f1 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-es-s.t b/tests/02ebcdic-es-s.t new file mode 100644 index 0000000..cce5b91 --- /dev/null +++ b/tests/02ebcdic-es-s.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-ES-S', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-ES-S', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-ES-S'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-ES-S', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00a2 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x0021 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00f1 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x00d1 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00a8 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x005c +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-es.t b/tests/02ebcdic-es.t new file mode 100644 index 0000000..f7c517a --- /dev/null +++ b/tests/02ebcdic-es.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-ES', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-ES', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-ES'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-ES', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00a2 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x0021 +0x5b 0x20a7 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00f1 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x00d1 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00a8 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x005c +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-fi-se-a.t b/tests/02ebcdic-fi-se-a.t new file mode 100644 index 0000000..5a489a0 --- /dev/null +++ b/tests/02ebcdic-fi-se-a.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-FI-SE-A', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-FI-SE-A', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-FI-SE-A'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-FI-SE-A', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00f6 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x00e5 +0x5b 0x00c5 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0xfffd +0x7a 0x003a +0x7b 0x00c4 +0x7c 0x00d6 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x00e4 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0xfffd +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-fi-se.t b/tests/02ebcdic-fi-se.t new file mode 100644 index 0000000..4e07c54 --- /dev/null +++ b/tests/02ebcdic-fi-se.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-FI-SE', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-FI-SE', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-FI-SE'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-FI-SE', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00a7 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x00a4 +0x5b 0x00c5 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00f6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x00e9 +0x7a 0x003a +0x7b 0x00c4 +0x7c 0x00d6 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00fc +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00e4 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x00e5 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x00c9 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-fr.t b/tests/02ebcdic-fr.t new file mode 100644 index 0000000..3c912c9 --- /dev/null +++ b/tests/02ebcdic-fr.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-FR', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-FR', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-FR'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-FR', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00b0 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x00a7 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00f9 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x00a3 +0x7c 0x00e0 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00a8 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00e9 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x00e8 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x00e7 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-is-friss.t b/tests/02ebcdic-is-friss.t new file mode 100644 index 0000000..f8e741e --- /dev/null +++ b/tests/02ebcdic-is-friss.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-IS-FRISS', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-IS-FRISS', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-IS-FRISS'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-IS-FRISS', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0x0020 +0x45 0xfffd +0x45 0xfffd +0x45 0xfffd +0x45 0xfffd +0x45 0x00e1 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x003c +0x4b 0x002e +0x4c 0x00c1 +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x00d0 +0x51 0x00e9 +0x55 0xfffd +0x55 0xfffd +0x55 0xfffd +0x55 0x00ed +0x59 0xfffd +0x59 0xfffd +0x59 0xfffd +0x59 0x0024 +0x5a 0x0025 +0x5b 0x00c9 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x0026 +0x60 0x002d +0x61 0x002f +0x69 0xfffd +0x69 0xfffd +0x69 0xfffd +0x69 0xfffd +0x69 0xfffd +0x69 0xfffd +0x69 0xfffd +0x69 0x0023 +0x6a 0x2018 +0x6b 0x002c +0x6c 0x00de +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x75 0xfffd +0x75 0xfffd +0x75 0xfffd +0x75 0xfffd +0x75 0xfffd +0x75 0x00cd +0x78 0xfffd +0x78 0xfffd +0x78 0x007c +0x79 0x00f0 +0x7a 0x003a +0x7b 0x00c6 +0x7c 0x00d6 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8d 0xfffd +0x8d 0xfffd +0x8d 0xfffd +0x8d 0x00dd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0x00b0 +0xa1 0x00f6 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xac 0xfffd +0xac 0xfffd +0xac 0x005b +0xad 0x00fd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0xfffd +0xbc 0x005d +0xbd 0x00a8 +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00fe +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xce 0xfffd +0xce 0xfffd +0xce 0xfffd +0xce 0xfffd +0xce 0x00f3 +0xd0 0xfffd +0xd0 0x00e6 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xde 0xfffd +0xde 0xfffd +0xde 0xfffd +0xde 0xfffd +0xde 0x00fa +0xe0 0xfffd +0xe0 0x00b4 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xee 0xfffd +0xee 0xfffd +0xee 0xfffd +0xee 0xfffd +0xee 0x00d3 +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfe 0xfffd +0xfe 0xfffd +0xfe 0xfffd +0xfe 0xfffd +0xfe 0x00da +0xff 0x007f diff --git a/tests/02ebcdic-it.t b/tests/02ebcdic-it.t new file mode 100644 index 0000000..86988e9 --- /dev/null +++ b/tests/02ebcdic-it.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-IT', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-IT', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-IT'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-IT', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00b0 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x00e9 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00f2 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x00f9 +0x7a 0x003a +0x7b 0x00a3 +0x7c 0x00a7 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00ec +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00e0 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x00e8 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x00e7 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-pt.t b/tests/02ebcdic-pt.t new file mode 100644 index 0000000..68ce71a --- /dev/null +++ b/tests/02ebcdic-pt.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-PT', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-PT', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-PT'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-PT', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00f5 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x00c3 +0x7c 0x00d5 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00e7 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00e3 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x00b4 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x00c7 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-uk.t b/tests/02ebcdic-uk.t new file mode 100644 index 0000000..c98aeec --- /dev/null +++ b/tests/02ebcdic-uk.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-UK', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-UK', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-UK'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-UK', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x0024 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x0021 +0x5b 0x00a3 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x203e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x005c +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ebcdic-us.t b/tests/02ebcdic-us.t new file mode 100644 index 0000000..8915394 --- /dev/null +++ b/tests/02ebcdic-us.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'EBCDIC-US', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'EBCDIC-US', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-US'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'EBCDIC-US', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00a2 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x0021 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x005c +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ecma-cyrillic.t b/tests/02ecma-cyrillic.t new file mode 100644 index 0000000..9c9400a --- /dev/null +++ b/tests/02ecma-cyrillic.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ECMA-CYRILLIC', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ECMA-CYRILLIC', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ECMA-CYRILLIC'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ECMA-CYRILLIC', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x0452 +0xa2 0x0453 +0xa3 0x0451 +0xa4 0x0454 +0xa5 0x0455 +0xa6 0x0456 +0xa7 0x0457 +0xa8 0x0458 +0xa9 0x0459 +0xaa 0x045a +0xab 0x045b +0xac 0x045c +0xad 0x00ad +0xae 0x045e +0xaf 0x045f +0xb0 0x2116 +0xb1 0x0402 +0xb2 0x0403 +0xb3 0x0401 +0xb4 0x0404 +0xb5 0x0405 +0xb6 0x0406 +0xb7 0x0407 +0xb8 0x0408 +0xb9 0x0409 +0xba 0x040a +0xbb 0x040b +0xbc 0x040c +0xbd 0x00a4 +0xbe 0x040e +0xbf 0x040f +0xc0 0x044e +0xc1 0x0430 +0xc2 0x0431 +0xc3 0x0446 +0xc4 0x0434 +0xc5 0x0435 +0xc6 0x0444 +0xc7 0x0433 +0xc8 0x0445 +0xc9 0x0438 +0xca 0x0439 +0xcb 0x043a +0xcc 0x043b +0xcd 0x043c +0xce 0x043d +0xcf 0x043e +0xd0 0x043f +0xd1 0x044f +0xd2 0x0440 +0xd3 0x0441 +0xd4 0x0442 +0xd5 0x0443 +0xd6 0x0436 +0xd7 0x0432 +0xd8 0x044c +0xd9 0x044b +0xda 0x0437 +0xdb 0x0448 +0xdc 0x044d +0xdd 0x0449 +0xde 0x0447 +0xdf 0x044a +0xe0 0x042e +0xe1 0x0410 +0xe2 0x0411 +0xe3 0x0426 +0xe4 0x0414 +0xe5 0x0415 +0xe6 0x0424 +0xe7 0x0413 +0xe8 0x0425 +0xe9 0x0418 +0xea 0x0419 +0xeb 0x041a +0xec 0x041b +0xed 0x041c +0xee 0x041d +0xef 0x041e +0xf0 0x041f +0xf1 0x042f +0xf2 0x0420 +0xf3 0x0421 +0xf4 0x0422 +0xf5 0x0423 +0xf6 0x0416 +0xf7 0x0412 +0xf8 0x042c +0xf9 0x042b +0xfa 0x0417 +0xfb 0x0428 +0xfc 0x042d +0xfd 0x0429 +0xfe 0x0427 +0xff 0x042a diff --git a/tests/02georgian-academy.t b/tests/02georgian-academy.t new file mode 100644 index 0000000..bf5706b --- /dev/null +++ b/tests/02georgian-academy.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'GEORGIAN-ACADEMY', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'GEORGIAN-ACADEMY', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GEORGIAN-ACADEMY'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GEORGIAN-ACADEMY', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x201a +0x83 0x0192 +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x88 0x02c6 +0x89 0x2030 +0x8a 0x0160 +0x8b 0x2039 +0x8c 0x0152 +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x98 0x02dc +0x99 0x2122 +0x9a 0x0161 +0x9b 0x203a +0x9c 0x0153 +0x9d 0x009d +0x9e 0x009e +0x9f 0x0178 +0xa0 0x00a0 +0xa1 0x00a1 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x00a5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x00aa +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x00b9 +0xba 0x00ba +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xbf 0x00bf +0xc0 0x10d0 +0xc1 0x10d1 +0xc2 0x10d2 +0xc3 0x10d3 +0xc4 0x10d4 +0xc5 0x10d5 +0xc6 0x10d6 +0xc7 0x10d7 +0xc8 0x10d8 +0xc9 0x10d9 +0xca 0x10da +0xcb 0x10db +0xcc 0x10dc +0xcd 0x10dd +0xce 0x10de +0xcf 0x10df +0xd0 0x10e0 +0xd1 0x10e1 +0xd2 0x10e2 +0xd3 0x10e3 +0xd4 0x10e4 +0xd5 0x10e5 +0xd6 0x10e6 +0xd7 0x10e7 +0xd8 0x10e8 +0xd9 0x10e9 +0xda 0x10ea +0xdb 0x10eb +0xdc 0x10ec +0xdd 0x10ed +0xde 0x10ee +0xdf 0x10ef +0xe0 0x10f0 +0xe1 0x10f1 +0xe2 0x10f2 +0xe3 0x10f3 +0xe4 0x10f4 +0xe5 0x10f5 +0xe6 0x10f6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x00f0 +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x00fe +0xff 0x00ff diff --git a/tests/02georgian-ps.t b/tests/02georgian-ps.t new file mode 100644 index 0000000..9d2563d --- /dev/null +++ b/tests/02georgian-ps.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'GEORGIAN-PS', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'GEORGIAN-PS', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GEORGIAN-PS'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GEORGIAN-PS', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x201a +0x83 0x0192 +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x88 0x02c6 +0x89 0x2030 +0x8a 0x0160 +0x8b 0x2039 +0x8c 0x0152 +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x98 0x02dc +0x99 0x2122 +0x9a 0x0161 +0x9b 0x203a +0x9c 0x0153 +0x9d 0x009d +0x9e 0x009e +0x9f 0x0178 +0xa0 0x00a0 +0xa1 0x00a1 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x00a5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x00aa +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x00b9 +0xba 0x00ba +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xbf 0x00bf +0xc0 0x10d0 +0xc1 0x10d1 +0xc2 0x10d2 +0xc3 0x10d3 +0xc4 0x10d4 +0xc5 0x10d5 +0xc6 0x10d6 +0xc7 0x10f1 +0xc8 0x10d7 +0xc9 0x10d8 +0xca 0x10d9 +0xcb 0x10da +0xcc 0x10db +0xcd 0x10dc +0xce 0x10f2 +0xcf 0x10dd +0xd0 0x10de +0xd1 0x10df +0xd2 0x10e0 +0xd3 0x10e1 +0xd4 0x10e2 +0xd5 0x10f3 +0xd6 0x10e3 +0xd7 0x10e4 +0xd8 0x10e5 +0xd9 0x10e6 +0xda 0x10e7 +0xdb 0x10e8 +0xdc 0x10e9 +0xdd 0x10ea +0xde 0x10eb +0xdf 0x10ec +0xe0 0x10ed +0xe1 0x10ee +0xe2 0x10f4 +0xe3 0x10ef +0xe4 0x10f0 +0xe5 0x10f5 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x00f0 +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x00fe +0xff 0x00ff diff --git a/tests/02gost_19768-74.t b/tests/02gost_19768-74.t new file mode 100644 index 0000000..0915028 --- /dev/null +++ b/tests/02gost_19768-74.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'GOST_19768-74', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'GOST_19768-74', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GOST_19768-74'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GOST_19768-74', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x0401 +0xad 0xfffd +0xad 0xfffd +0xad 0xfffd +0xad 0xfffd +0xad 0xfffd +0xad 0xfffd +0xad 0xfffd +0xad 0xfffd +0xad 0xfffd +0xad 0xfffd +0xad 0xfffd +0xad 0x00ad +0xb0 0xfffd +0xb0 0xfffd +0xb0 0x0410 +0xb1 0x0411 +0xb2 0x0412 +0xb3 0x0413 +0xb4 0x0414 +0xb5 0x0415 +0xb6 0x0416 +0xb7 0x0417 +0xb8 0x0418 +0xb9 0x0419 +0xba 0x041a +0xbb 0x041b +0xbc 0x041c +0xbd 0x041d +0xbe 0x041e +0xbf 0x041f +0xc0 0x0420 +0xc1 0x0421 +0xc2 0x0422 +0xc3 0x0423 +0xc4 0x0424 +0xc5 0x0425 +0xc6 0x0426 +0xc7 0x0427 +0xc8 0x0428 +0xc9 0x0429 +0xca 0x042a +0xcb 0x042b +0xcc 0x042c +0xcd 0x042d +0xce 0x042e +0xcf 0x042f +0xd0 0x0430 +0xd1 0x0431 +0xd2 0x0432 +0xd3 0x0433 +0xd4 0x0434 +0xd5 0x0435 +0xd6 0x0436 +0xd7 0x0437 +0xd8 0x0438 +0xd9 0x0439 +0xda 0x043a +0xdb 0x043b +0xdc 0x043c +0xdd 0x043d +0xde 0x043e +0xdf 0x043f +0xe0 0x0440 +0xe1 0x0441 +0xe2 0x0442 +0xe3 0x0443 +0xe4 0x0444 +0xe5 0x0445 +0xe6 0x0446 +0xe7 0x0447 +0xe8 0x0448 +0xe9 0x0449 +0xea 0x044a +0xeb 0x044b +0xec 0x044c +0xed 0x044d +0xee 0x044e +0xef 0x044f +0xf1 0xfffd +0xf1 0x0451 +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02greek-ccitt.t b/tests/02greek-ccitt.t new file mode 100644 index 0000000..4241690 --- /dev/null +++ b/tests/02greek-ccitt.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'GREEK-CCITT', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'GREEK-CCITT', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GREEK-CCITT'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GREEK-CCITT', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x00a4 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0391 +0x42 0x0392 +0x43 0x0393 +0x44 0x0394 +0x45 0x0395 +0x46 0x0396 +0x47 0x0397 +0x48 0x0398 +0x49 0x0399 +0x4a 0x039a +0x4b 0x039b +0x4c 0x039c +0x4d 0x039d +0x4e 0x039e +0x4f 0x039f +0x50 0x03a0 +0x51 0x03a1 +0x53 0xfffd +0x53 0x03a3 +0x54 0x03a4 +0x55 0x03a5 +0x56 0x03a6 +0x57 0x03a7 +0x58 0x03a8 +0x59 0x03a9 +0x5b 0xfffd +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x61 0xfffd +0x61 0x03b1 +0x62 0x03b2 +0x63 0x03b3 +0x64 0x03b4 +0x65 0x03b5 +0x66 0x03b6 +0x67 0x03b7 +0x68 0x03b8 +0x69 0x03b9 +0x6a 0x03ba +0x6b 0x03bb +0x6c 0x03bc +0x6d 0x03bd +0x6e 0x03be +0x6f 0x03bf +0x70 0x03c0 +0x71 0x03c1 +0x72 0x03c2 +0x73 0x03c3 +0x74 0x03c4 +0x75 0x03c5 +0x76 0x03c6 +0x77 0x03c7 +0x78 0x03c8 +0x79 0x03c9 +0x7b 0xfffd +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x00af +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02greek7-old.t b/tests/02greek7-old.t new file mode 100644 index 0000000..80c9b59 --- /dev/null +++ b/tests/02greek7-old.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'GREEK7-OLD', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'GREEK7-OLD', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GREEK7-OLD'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GREEK7-OLD', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x00a3 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x00b4 +0x41 0x03b1 +0x42 0x03b2 +0x43 0x03c8 +0x44 0x03b4 +0x45 0x03b5 +0x46 0x03c6 +0x47 0x03b3 +0x48 0x03b7 +0x49 0x03b9 +0x4a 0x03be +0x4b 0x03ba +0x4c 0x03bb +0x4d 0x03bc +0x4e 0x03bd +0x4f 0x03bf +0x50 0x03c0 +0x51 0x037a +0x52 0x03c1 +0x53 0x03c3 +0x54 0x03c4 +0x55 0x03b8 +0x56 0x03c9 +0x57 0x03c2 +0x58 0x03c7 +0x59 0x03c5 +0x5a 0x03b6 +0x5b 0x1fcf +0x5c 0x1fbf +0x5d 0x1fce +0x5e 0x007e +0x5f 0x005f +0x60 0x0060 +0x61 0x0391 +0x62 0x0392 +0x63 0x03a8 +0x64 0x0394 +0x65 0x0395 +0x66 0x03a6 +0x67 0x0393 +0x68 0x0397 +0x69 0x0399 +0x6a 0x039e +0x6b 0x039a +0x6c 0x039b +0x6d 0x039c +0x6e 0x039d +0x6f 0x039f +0x70 0x03a0 +0x72 0xfffd +0x72 0x03a1 +0x73 0x03a3 +0x74 0x03a4 +0x75 0x0398 +0x76 0x03a9 +0x77 0x00b7 +0x78 0x03a7 +0x79 0x03a5 +0x7a 0x0396 +0x7b 0x1fdf +0x7c 0x1ffe +0x7d 0x1fde +0x7e 0x00a8 +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02greek7.t b/tests/02greek7.t new file mode 100644 index 0000000..b855ed7 --- /dev/null +++ b/tests/02greek7.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'GREEK7', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'GREEK7', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GREEK7'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'GREEK7', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x00a4 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0391 +0x42 0x0392 +0x43 0x0393 +0x44 0x0394 +0x45 0x0395 +0x46 0x0396 +0x47 0x0397 +0x48 0x0398 +0x49 0x0399 +0x4b 0xfffd +0x4b 0x039a +0x4c 0x039b +0x4d 0x039c +0x4e 0x039d +0x4f 0x039e +0x50 0x039f +0x51 0x03a0 +0x52 0x03a1 +0x53 0x03a3 +0x54 0x03a4 +0x55 0x03a5 +0x56 0x03a6 +0x58 0xfffd +0x58 0x03a7 +0x59 0x03a8 +0x5a 0x03a9 +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x03b1 +0x62 0x03b2 +0x63 0x03b3 +0x64 0x03b4 +0x65 0x03b5 +0x66 0x03b6 +0x67 0x03b7 +0x68 0x03b8 +0x69 0x03b9 +0x6b 0xfffd +0x6b 0x03ba +0x6c 0x03bb +0x6d 0x03bc +0x6e 0x03bd +0x6f 0x03be +0x70 0x03bf +0x71 0x03c0 +0x72 0x03c1 +0x73 0x03c3 +0x74 0x03c4 +0x75 0x03c5 +0x76 0x03c6 +0x77 0x03c2 +0x78 0x03c7 +0x79 0x03c8 +0x7a 0x03c9 +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x203e +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02hp-roman8.t b/tests/02hp-roman8.t new file mode 100644 index 0000000..5fd85e5 --- /dev/null +++ b/tests/02hp-roman8.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'HP-ROMAN8', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'HP-ROMAN8', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'HP-ROMAN8'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'HP-ROMAN8', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x00c0 +0xa2 0x00c2 +0xa3 0x00c8 +0xa4 0x00ca +0xa5 0x00cb +0xa6 0x00ce +0xa7 0x00cf +0xa8 0x00b4 +0xa9 0x02cb +0xaa 0x02c6 +0xab 0x00a8 +0xac 0x02dc +0xad 0x00d9 +0xae 0x00db +0xaf 0x20a4 +0xb0 0x00af +0xb1 0x00dd +0xb2 0x00fd +0xb3 0x00b0 +0xb4 0x00c7 +0xb5 0x00e7 +0xb6 0x00d1 +0xb7 0x00f1 +0xb8 0x00a1 +0xb9 0x00bf +0xba 0x00a4 +0xbb 0x00a3 +0xbc 0x00a5 +0xbd 0x00a7 +0xbe 0x0192 +0xbf 0x00a2 +0xc0 0x00e2 +0xc1 0x00ea +0xc2 0x00f4 +0xc3 0x00fb +0xc4 0x00e1 +0xc5 0x00e9 +0xc6 0x00f3 +0xc7 0x00fa +0xc8 0x00e0 +0xc9 0x00e8 +0xca 0x00f2 +0xcb 0x00f9 +0xcc 0x00e4 +0xcd 0x00eb +0xce 0x00f6 +0xcf 0x00fc +0xd0 0x00c5 +0xd1 0x00ee +0xd2 0x00d8 +0xd3 0x00c6 +0xd4 0x00e5 +0xd5 0x00ed +0xd6 0x00f8 +0xd7 0x00e6 +0xd8 0x00c4 +0xd9 0x00ec +0xda 0x00d6 +0xdb 0x00dc +0xdc 0x00c9 +0xdd 0x00ef +0xde 0x00df +0xdf 0x00d4 +0xe0 0x00c1 +0xe1 0x00c3 +0xe2 0x00e3 +0xe3 0x00d0 +0xe4 0x00f0 +0xe5 0x00cd +0xe6 0x00cc +0xe7 0x00d3 +0xe8 0x00d2 +0xe9 0x00d5 +0xea 0x00f5 +0xeb 0x0160 +0xec 0x0161 +0xed 0x00da +0xee 0x0178 +0xef 0x00ff +0xf0 0x00de +0xf1 0x00fe +0xf2 0x00b7 +0xf3 0x00b5 +0xf4 0x00b6 +0xf5 0x00be +0xf6 0x2014 +0xf7 0x00bc +0xf8 0x00bd +0xf9 0x00aa +0xfa 0x00ba +0xfb 0x00ab +0xfc 0x25a0 +0xfd 0x00bb +0xfe 0x00b1 +0xff 0xfffd diff --git a/tests/02ibm037.t b/tests/02ibm037.t new file mode 100644 index 0000000..83f1a4c --- /dev/null +++ b/tests/02ibm037.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM037', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM037', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM037'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM037', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x00e7 +0x49 0x00f1 +0x4a 0x00a2 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x0021 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x005e +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x005b +0xbb 0x005d +0xbc 0x00af +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x00fc +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x005c +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm038.t b/tests/02ibm038.t new file mode 100644 index 0000000..504d112 --- /dev/null +++ b/tests/02ibm038.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM038', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM038', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM038'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM038', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x005c +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ibm1004.t b/tests/02ibm1004.t new file mode 100644 index 0000000..33d9a8c --- /dev/null +++ b/tests/02ibm1004.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM1004', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM1004', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM1004'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM1004', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x82 0xfffd +0x82 0xfffd +0x82 0x201a +0x84 0xfffd +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x88 0x02c6 +0x89 0x2030 +0x8a 0x0160 +0x8b 0x2039 +0x8c 0x0152 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x98 0x02dc +0x99 0x2122 +0x9a 0x0161 +0x9b 0x203a +0x9c 0x0153 +0x9f 0xfffd +0x9f 0xfffd +0x9f 0x0178 +0xa0 0x00a0 +0xa1 0x00a1 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x00a5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x00aa +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x00b9 +0xba 0x00ba +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xbf 0x00bf +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd0 0x00d0 +0xd1 0x00d1 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x00d8 +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x00dd +0xde 0x00de +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x00f0 +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x00fe +0xff 0x00ff diff --git a/tests/02ibm1026.t b/tests/02ibm1026.t new file mode 100644 index 0000000..6fbe4ac --- /dev/null +++ b/tests/02ibm1026.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM1026', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM1026', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM1026'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM1026', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x007b +0x49 0x00f1 +0x4a 0x00c7 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x011e +0x5b 0x0130 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x005b +0x69 0x00d1 +0x6a 0x015f +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0131 +0x7a 0x003a +0x7b 0x00d6 +0x7c 0x015e +0x7d 0x0027 +0x7e 0x003d +0x7f 0x00dc +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x007d +0x8d 0x0060 +0x8e 0x00a6 +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x02db +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x00f6 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x005d +0xad 0x0024 +0xae 0x0040 +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00ac +0xbb 0x007c +0xbc 0x2014 +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x00e7 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x007e +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x011f +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x005c +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x00fc +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x0023 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x0022 +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm1047.t b/tests/02ibm1047.t new file mode 100644 index 0000000..b7eb85f --- /dev/null +++ b/tests/02ibm1047.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM1047', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM1047', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM1047'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM1047', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x00e7 +0x49 0x00f1 +0x4a 0x00a2 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x0021 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x005b +0xae 0x00de +0xaf 0x00ae +0xb0 0x00ac +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00dd +0xbb 0x00a8 +0xbc 0x00af +0xbd 0x005d +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x00fc +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x005c +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm256.t b/tests/02ibm256.t new file mode 100644 index 0000000..475eb24 --- /dev/null +++ b/tests/02ibm256.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM256', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM256', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM256'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM256', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x00e7 +0x49 0x00f1 +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x20a7 +0xb4 0x0192 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00ac +0xbb 0x007c +0xbc 0x203e +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x2017 +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x00fc +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x005c +0xe1 0x2003 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm273.t b/tests/02ibm273.t new file mode 100644 index 0000000..2ee5ff5 --- /dev/null +++ b/tests/02ibm273.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM273', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM273', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM273'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM273', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x007b +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x00e7 +0x49 0x00f1 +0x4a 0x00c4 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x007e +0x5a 0x00dc +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x005b +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00f6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x00a7 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x00df +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x0040 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00ac +0xbb 0x007c +0xbc 0x203e +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x00e4 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00a6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x00fc +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x007d +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x00d6 +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x005c +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x005d +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm274.t b/tests/02ibm274.t new file mode 100644 index 0000000..ff41144 --- /dev/null +++ b/tests/02ibm274.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM274', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM274', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM274'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM274', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00f9 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x00e0 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x00a8 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00e9 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x00e8 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x00e7 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ibm275.t b/tests/02ibm275.t new file mode 100644 index 0000000..9dbd73f --- /dev/null +++ b/tests/02ibm275.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM275', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM275', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM275'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM275', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00c9 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x0024 +0x5b 0x00c7 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00e7 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x00e3 +0x7a 0x003a +0x7b 0x00d5 +0x7c 0x00c3 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x00f5 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x00e9 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x005c +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ibm277.t b/tests/02ibm277.t new file mode 100644 index 0000000..8e66d15 --- /dev/null +++ b/tests/02ibm277.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM277', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM277', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM277'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM277', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x007d +0x48 0x00e7 +0x49 0x00f1 +0x4a 0x0023 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x00a4 +0x5b 0x00c5 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x0024 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00f8 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00a6 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0060 +0x7a 0x003a +0x7b 0x00c6 +0x7c 0x00d8 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x0040 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x007b +0x9d 0x00b8 +0x9e 0x005b +0x9f 0x005d +0xa0 0x00b5 +0xa1 0x00fc +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00ac +0xbb 0x007c +0xbc 0x203e +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x00e6 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x00e5 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x007e +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x005c +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm278.t b/tests/02ibm278.t new file mode 100644 index 0000000..1809b27 --- /dev/null +++ b/tests/02ibm278.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM278', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM278', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM278'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM278', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x007b +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x007d +0x48 0x00e7 +0x49 0x00f1 +0x4a 0x00a7 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x0060 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x00a4 +0x5b 0x00c5 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x0023 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x0024 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00f6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x00e9 +0x7a 0x003a +0x7b 0x00c4 +0x7c 0x00d6 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x005d +0xa0 0x00b5 +0xa1 0x00fc +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x005b +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00ac +0xbb 0x007c +0xbc 0x203e +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x00e4 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00a6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x00e5 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x007e +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x005c +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x0040 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm280.t b/tests/02ibm280.t new file mode 100644 index 0000000..ff0342c --- /dev/null +++ b/tests/02ibm280.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM280', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM280', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM280'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM280', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x007b +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x005c +0x49 0x00f1 +0x4a 0x00b0 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x005d +0x52 0x00ea +0x53 0x00eb +0x54 0x007d +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x007e +0x59 0x00df +0x5a 0x00e9 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00f2 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x00f9 +0x7a 0x003a +0x7b 0x00a3 +0x7c 0x00a7 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x005b +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x00ec +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x0023 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x0040 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00ac +0xbb 0x007c +0xbc 0x203e +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x00e0 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x00a6 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x00e8 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x00fc +0xdd 0x0060 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x00e7 +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm281.t b/tests/02ibm281.t new file mode 100644 index 0000000..1d466b8 --- /dev/null +++ b/tests/02ibm281.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM281', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM281', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM281'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM281', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0xfffd +0x4a 0x00a3 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0xfffd +0x5a 0x0021 +0x5b 0x00a5 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x203e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x0024 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ibm284.t b/tests/02ibm284.t new file mode 100644 index 0000000..35b86ed --- /dev/null +++ b/tests/02ibm284.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM284', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM284', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM284'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM284', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x00e7 +0x49 0x00a6 +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x0023 +0x6a 0x00f1 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0060 +0x7a 0x003a +0x7b 0x00d1 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x00a8 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x005e +0xbb 0x0021 +0xbc 0x203e +0xbd 0x007e +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x00fc +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x005c +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm285.t b/tests/02ibm285.t new file mode 100644 index 0000000..44f9705 --- /dev/null +++ b/tests/02ibm285.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM285', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM285', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM285'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM285', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x00e7 +0x49 0x00f1 +0x4a 0x0024 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x0021 +0x5b 0x00a3 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x203e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x005b +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x005e +0xbb 0x005d +0xbc 0x007e +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x00fc +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x005c +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm290.t b/tests/02ibm290.t new file mode 100644 index 0000000..568286a --- /dev/null +++ b/tests/02ibm290.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM290', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM290', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM290'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM290', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x3002 +0x42 0x300c +0x43 0x300d +0x44 0x3001 +0x45 0x30fb +0x46 0x30f2 +0x47 0x30a1 +0x48 0x30a3 +0x49 0x30a5 +0x4a 0x00a3 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x51 0x30a7 +0x52 0x30a9 +0x53 0x30e3 +0x54 0x30e5 +0x55 0x30e7 +0x56 0x30c3 +0x58 0xfffd +0x58 0x30fc +0x5a 0xfffd +0x5a 0x0021 +0x5b 0x00a5 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0xfffd +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0xfffd +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x30a2 +0x82 0x30a4 +0x83 0x30a6 +0x84 0x30a8 +0x85 0x30aa +0x86 0x30ab +0x87 0x30ad +0x88 0x30af +0x89 0x30b1 +0x8a 0x30b3 +0x8c 0xfffd +0x8c 0x30b5 +0x8d 0x30b7 +0x8e 0x30b9 +0x8f 0x30bb +0x90 0x30bd +0x91 0x30bf +0x92 0x30c1 +0x93 0x30c4 +0x94 0x30c6 +0x95 0x30c8 +0x96 0x30ca +0x97 0x30cb +0x98 0x30cc +0x99 0x30cd +0x9a 0x30ce +0x9d 0xfffd +0x9d 0xfffd +0x9d 0x30cf +0x9e 0x30d2 +0x9f 0x30d5 +0xa1 0xfffd +0xa1 0x203e +0xa2 0x30d8 +0xa3 0x30db +0xa4 0x30de +0xa5 0x30df +0xa6 0x30e0 +0xa7 0x30e1 +0xa8 0x30e2 +0xa9 0x30e4 +0xaa 0x30e6 +0xac 0xfffd +0xac 0x30e8 +0xad 0x30e9 +0xae 0x30ea +0xaf 0x30eb +0xba 0xfffd +0xba 0xfffd +0xba 0xfffd +0xba 0xfffd +0xba 0xfffd +0xba 0xfffd +0xba 0xfffd +0xba 0xfffd +0xba 0xfffd +0xba 0xfffd +0xba 0x30ec +0xbb 0x30ed +0xbc 0x30ef +0xbd 0x30f3 +0xbe 0x309b +0xbf 0x309c +0xc1 0xfffd +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0xfffd +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x0024 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ibm297.t b/tests/02ibm297.t new file mode 100644 index 0000000..c1b7da8 --- /dev/null +++ b/tests/02ibm297.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM297', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM297', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM297'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM297', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x0040 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x005c +0x49 0x00f1 +0x4a 0x00b0 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x007b +0x52 0x00ea +0x53 0x00eb +0x54 0x007d +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x00a7 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00f9 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x00b5 +0x7a 0x003a +0x7b 0x00a3 +0x7c 0x00e0 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x005b +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x0060 +0xa1 0x00a8 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x0023 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x005d +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00ac +0xbb 0x007c +0xbc 0x203e +0xbd 0x007e +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x00e9 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x00e8 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x00fc +0xdd 0x00a6 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x00e7 +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm420.t b/tests/02ibm420.t new file mode 100644 index 0000000..8ccafd8 --- /dev/null +++ b/tests/02ibm420.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM420', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM420', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM420'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\xd0"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM420', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x0651 +0x43 0xfe7d +0x44 0x0640 +0x46 0xfffd +0x46 0x0621 +0x47 0x0622 +0x48 0xfe82 +0x49 0x0623 +0x4a 0x00a2 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x51 0xfe84 +0x52 0x0624 +0x55 0xfffd +0x55 0xfffd +0x55 0x0626 +0x56 0x0627 +0x57 0xfe8e +0x58 0x0628 +0x59 0xfe91 +0x5a 0x0021 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x62 0x0629 +0x63 0x062a +0x64 0xfe97 +0x65 0x062b +0x66 0xfe9b +0x67 0x062c +0x68 0xfe9f +0x69 0x062d +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0xfea3 +0x71 0x062e +0x72 0xfea7 +0x73 0x062f +0x74 0x0630 +0x75 0x0631 +0x76 0x0632 +0x77 0x0633 +0x78 0xfeb3 +0x79 0x060c +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x0634 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0xfeb7 +0x8b 0x0635 +0x8c 0xfebb +0x8d 0x0636 +0x8e 0xfebf +0x8f 0x0637 +0x90 0x0638 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x0639 +0x9b 0xfeca +0x9c 0xfecb +0x9d 0xfecc +0x9e 0x063a +0x9f 0xfece +0xa0 0xfecf +0xa1 0x00f7 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0xfed0 +0xab 0x0641 +0xac 0xfed3 +0xad 0x0642 +0xae 0xfed7 +0xaf 0x0643 +0xb0 0xfedb +0xb1 0x0644 +0xb2 0xfef5 +0xb3 0xfef6 +0xb4 0xfef7 +0xb5 0xfef8 +0xb8 0xfffd +0xb8 0xfffd +0xb8 0xfefb +0xb9 0xfefc +0xba 0xfedf +0xbb 0x0645 +0xbc 0xfee3 +0xbd 0x0646 +0xbe 0xfee7 +0xbf 0x0647 +0xc0 0x061b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0xfeeb +0xcd 0xfffd +0xcd 0xfeec +0xcf 0xfffd +0xcf 0x0648 +0xd0 0x061f +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x0649 +0xdb 0xfef0 +0xdc 0x064a +0xdd 0xfef2 +0xde 0xfef3 +0xdf 0x0660 +0xe0 0x00d7 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x0661 +0xeb 0x0662 +0xed 0xfffd +0xed 0x0663 +0xee 0x0664 +0xef 0x0665 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfb 0xfffd +0xfb 0x0666 +0xfc 0x0667 +0xfd 0x0668 +0xfe 0x0669 +0xff 0x009f diff --git a/tests/02ibm423.t b/tests/02ibm423.t new file mode 100644 index 0000000..ed986bc --- /dev/null +++ b/tests/02ibm423.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM423', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM423', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM423'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM423', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x0391 +0x42 0x0392 +0x43 0x0393 +0x44 0x0394 +0x45 0x0395 +0x46 0x0396 +0x47 0x0397 +0x48 0x0398 +0x49 0x0399 +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x039a +0x52 0x039b +0x53 0x039c +0x54 0x039d +0x55 0x039e +0x56 0x039f +0x57 0x03a0 +0x58 0x03a1 +0x59 0x03a3 +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x03a4 +0x63 0x03a5 +0x64 0x03a6 +0x65 0x03a7 +0x66 0x03a8 +0x67 0x03a9 +0x6b 0xfffd +0x6b 0xfffd +0x6b 0xfffd +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x71 0xfffd +0x71 0x0386 +0x72 0x0388 +0x73 0x0389 +0x75 0xfffd +0x75 0x038a +0x76 0x038c +0x77 0x038e +0x78 0x038f +0x79 0x0060 +0x7a 0x003a +0x7b 0x00a3 +0x7c 0x00a7 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00c4 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x03b1 +0x8b 0x03b2 +0x8c 0x03b3 +0x8d 0x03b4 +0x8e 0x03b5 +0x8f 0x03b6 +0x90 0x00d6 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x03b7 +0x9b 0x03b8 +0x9c 0x03b9 +0x9d 0x03ba +0x9e 0x03bb +0x9f 0x03bc +0xa0 0x00dc +0xa1 0x00a8 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x03bd +0xab 0x03be +0xac 0x03bf +0xad 0x03c0 +0xae 0x03c1 +0xaf 0x03c2 +0xb1 0xfffd +0xb1 0x03ac +0xb2 0x03ad +0xb3 0x03ae +0xb4 0x03ca +0xb5 0x03af +0xb6 0x03cc +0xb7 0x03cd +0xb8 0x03cb +0xb9 0x03ce +0xba 0x03c3 +0xbb 0x03c4 +0xbc 0x03c5 +0xbd 0x03c6 +0xbe 0x03c7 +0xbf 0x03c8 +0xc0 0x00b8 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xcb 0xfffd +0xcb 0x03c9 +0xcc 0x00c2 +0xcd 0x00e0 +0xce 0x00e4 +0xcf 0x00ea +0xd0 0x00b4 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b1 +0xdb 0x00e9 +0xdc 0x00e8 +0xdd 0x00eb +0xde 0x00ee +0xdf 0x00ef +0xe0 0x00b0 +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00bd +0xeb 0x00f6 +0xec 0x00f4 +0xed 0x00fb +0xee 0x00f9 +0xef 0x00fc +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00ff +0xfb 0x00e7 +0xfc 0x00c7 +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ibm424.t b/tests/02ibm424.t new file mode 100644 index 0000000..3cb9413 --- /dev/null +++ b/tests/02ibm424.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM424', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM424', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM424'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM424', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x05d0 +0x42 0x05d1 +0x43 0x05d2 +0x44 0x05d3 +0x45 0x05d4 +0x46 0x05d5 +0x47 0x05d6 +0x48 0x05d7 +0x49 0x05d8 +0x4a 0x00a2 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x007c +0x50 0x0026 +0x51 0x05d9 +0x52 0x05da +0x53 0x05db +0x54 0x05dc +0x55 0x05dd +0x56 0x05de +0x57 0x05df +0x58 0x05e0 +0x59 0x05e1 +0x5a 0x0021 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00ac +0x60 0x002d +0x61 0x002f +0x62 0x05e2 +0x63 0x05e3 +0x64 0x05e4 +0x65 0x05e5 +0x66 0x05e6 +0x67 0x05e7 +0x68 0x05e8 +0x69 0x05e9 +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x71 0xfffd +0x71 0x05ea +0x74 0xfffd +0x74 0xfffd +0x74 0x00a0 +0x78 0xfffd +0x78 0xfffd +0x78 0xfffd +0x78 0x21d4 +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x81 0xfffd +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x90 0xfffd +0x90 0xfffd +0x90 0xfffd +0x90 0xfffd +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9d 0xfffd +0x9d 0xfffd +0x9d 0xfffd +0x9d 0x00b8 +0x9f 0xfffd +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaf 0xfffd +0xaf 0xfffd +0xaf 0xfffd +0xaf 0xfffd +0xaf 0xfffd +0xaf 0x00ae +0xb0 0x005e +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x005b +0xbb 0x005d +0xbc 0x203e +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0xfffd +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x005c +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0xfffd +0xff 0x009f diff --git a/tests/02ibm437.t b/tests/02ibm437.t new file mode 100644 index 0000000..d1e0a92 --- /dev/null +++ b/tests/02ibm437.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM437', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM437', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM437'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM437', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x00e0 +0x86 0x00e5 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00ef +0x8c 0x00ee +0x8d 0x00ec +0x8e 0x00c4 +0x8f 0x00c5 +0x90 0x00c9 +0x91 0x00e6 +0x92 0x00c6 +0x93 0x00f4 +0x94 0x00f6 +0x95 0x00f2 +0x96 0x00fb +0x97 0x00f9 +0x98 0x00ff +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x00a2 +0x9c 0x00a3 +0x9d 0x00a5 +0x9e 0x20a7 +0x9f 0x0192 +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00f1 +0xa5 0x00d1 +0xa6 0x00aa +0xa7 0x00ba +0xa8 0x00bf +0xa9 0x2310 +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x2561 +0xb6 0x2562 +0xb7 0x2556 +0xb8 0x2555 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x255c +0xbe 0x255b +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x255e +0xc7 0x255f +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x2567 +0xd0 0x2568 +0xd1 0x2564 +0xd2 0x2565 +0xd3 0x2559 +0xd4 0x2558 +0xd5 0x2552 +0xd6 0x2553 +0xd7 0x256b +0xd8 0x256a +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x258c +0xde 0x2590 +0xdf 0x2580 +0xe0 0x03b1 +0xe1 0x00df +0xe2 0x0393 +0xe3 0x03c0 +0xe4 0x03a3 +0xe5 0x03c3 +0xe6 0x00b5 +0xe7 0x03c4 +0xe8 0x03a6 +0xe9 0x0398 +0xea 0x03a9 +0xeb 0x03b4 +0xec 0x221e +0xed 0x03c6 +0xee 0x03b5 +0xef 0x2229 +0xf0 0x2261 +0xf1 0x00b1 +0xf2 0x2265 +0xf3 0x2264 +0xf4 0x2320 +0xf5 0x2321 +0xf6 0x00f7 +0xf7 0x2248 +0xf8 0x00b0 +0xf9 0x2219 +0xfa 0x00b7 +0xfb 0x221a +0xfc 0x207f +0xfd 0x00b2 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm500.t b/tests/02ibm500.t new file mode 100644 index 0000000..d29abd7 --- /dev/null +++ b/tests/02ibm500.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM500', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM500', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM500'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM500', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x00e7 +0x49 0x00f1 +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x00f0 +0x8d 0x00fd +0x8e 0x00fe +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x00e6 +0x9d 0x00b8 +0x9e 0x00c6 +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x00d0 +0xad 0x00dd +0xae 0x00de +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00ac +0xbb 0x007c +0xbc 0x00af +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x00fc +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x005c +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm850.t b/tests/02ibm850.t new file mode 100644 index 0000000..54185b8 --- /dev/null +++ b/tests/02ibm850.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM850', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM850', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM850'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM850', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x00e0 +0x86 0x00e5 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00ef +0x8c 0x00ee +0x8d 0x00ec +0x8e 0x00c4 +0x8f 0x00c5 +0x90 0x00c9 +0x91 0x00e6 +0x92 0x00c6 +0x93 0x00f4 +0x94 0x00f6 +0x95 0x00f2 +0x96 0x00fb +0x97 0x00f9 +0x98 0x00ff +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x00f8 +0x9c 0x00a3 +0x9d 0x00d8 +0x9e 0x00d7 +0x9f 0x0192 +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00f1 +0xa5 0x00d1 +0xa6 0x00aa +0xa7 0x00ba +0xa8 0x00bf +0xa9 0x00ae +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x00c1 +0xb6 0x00c2 +0xb7 0x00c0 +0xb8 0x00a9 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x00a2 +0xbe 0x00a5 +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x00e3 +0xc7 0x00c3 +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x00a4 +0xd0 0x00f0 +0xd1 0x00d0 +0xd2 0x00ca +0xd3 0x00cb +0xd4 0x00c8 +0xd5 0x0131 +0xd6 0x00cd +0xd7 0x00ce +0xd8 0x00cf +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x00a6 +0xde 0x00cc +0xdf 0x2580 +0xe0 0x00d3 +0xe1 0x00df +0xe2 0x00d4 +0xe3 0x00d2 +0xe4 0x00f5 +0xe5 0x00d5 +0xe6 0x00b5 +0xe7 0x00fe +0xe8 0x00de +0xe9 0x00da +0xea 0x00db +0xeb 0x00d9 +0xec 0x00fd +0xed 0x00dd +0xee 0x00af +0xef 0x00b4 +0xf0 0x00ad +0xf1 0x00b1 +0xf2 0x2017 +0xf3 0x00be +0xf4 0x00b6 +0xf5 0x00a7 +0xf6 0x00f7 +0xf7 0x00b8 +0xf8 0x00b0 +0xf9 0x00a8 +0xfa 0x00b7 +0xfb 0x00b9 +0xfc 0x00b3 +0xfd 0x00b2 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm851.t b/tests/02ibm851.t new file mode 100644 index 0000000..4fde366 --- /dev/null +++ b/tests/02ibm851.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM851', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM851', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM851'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM851', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x00e0 +0x86 0x0386 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00ef +0x8c 0x00ee +0x8d 0x0388 +0x8e 0x00c4 +0x8f 0x0389 +0x90 0x038a +0x92 0xfffd +0x92 0x038c +0x93 0x00f4 +0x94 0x00f6 +0x95 0x038e +0x96 0x00fb +0x97 0x00f9 +0x98 0x038f +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x03ac +0x9c 0x00a3 +0x9d 0x03ad +0x9e 0x03ae +0x9f 0x03af +0xa0 0x03ca +0xa1 0x0390 +0xa2 0x03cc +0xa3 0x03cd +0xa4 0x0391 +0xa5 0x0392 +0xa6 0x0393 +0xa7 0x0394 +0xa8 0x0395 +0xa9 0x0396 +0xaa 0x0397 +0xab 0x00bd +0xac 0x0398 +0xad 0x0399 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x039a +0xb6 0x039b +0xb7 0x039d +0xb8 0x039c +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x039e +0xbe 0x039f +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x03a0 +0xc7 0x03a1 +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x03a3 +0xd0 0x03a4 +0xd1 0x03a5 +0xd2 0x03a6 +0xd3 0x03a7 +0xd4 0x03a8 +0xd5 0x03a9 +0xd6 0x03b1 +0xd7 0x03b2 +0xd8 0x03b3 +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x03b4 +0xde 0x03b5 +0xdf 0x2580 +0xe0 0x03b6 +0xe1 0x03b7 +0xe2 0x03b8 +0xe3 0x03b9 +0xe4 0x03ba +0xe5 0x03bb +0xe6 0x03bc +0xe7 0x03bd +0xe8 0x03be +0xe9 0x03bf +0xea 0x03c0 +0xeb 0x03c1 +0xec 0x03c3 +0xed 0x03c2 +0xee 0x03c4 +0xef 0x00b4 +0xf0 0x00ad +0xf1 0x00b1 +0xf2 0x03c5 +0xf3 0x03c6 +0xf4 0x03c7 +0xf5 0x00a7 +0xf6 0x03c8 +0xf7 0x02db +0xf8 0x00b0 +0xf9 0x00a8 +0xfa 0x03c9 +0xfb 0x03cb +0xfc 0x03b0 +0xfd 0x03ce +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm852.t b/tests/02ibm852.t new file mode 100644 index 0000000..7c62b40 --- /dev/null +++ b/tests/02ibm852.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM852', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM852', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM852'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM852', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x016f +0x86 0x0107 +0x87 0x00e7 +0x88 0x0142 +0x89 0x00eb +0x8a 0x0150 +0x8b 0x0151 +0x8c 0x00ee +0x8d 0x0179 +0x8e 0x00c4 +0x8f 0x0106 +0x90 0x00c9 +0x91 0x0139 +0x92 0x013a +0x93 0x00f4 +0x94 0x00f6 +0x95 0x013d +0x96 0x013e +0x97 0x015a +0x98 0x015b +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x0164 +0x9c 0x0165 +0x9d 0x0141 +0x9e 0x00d7 +0x9f 0x010d +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x0104 +0xa5 0x0105 +0xa6 0x017d +0xa7 0x017e +0xa8 0x0118 +0xa9 0x0119 +0xaa 0x00ac +0xab 0x017a +0xac 0x010c +0xad 0x015f +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x00c1 +0xb6 0x00c2 +0xb7 0x011a +0xb8 0x015e +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x017b +0xbe 0x017c +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x0102 +0xc7 0x0103 +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x00a4 +0xd0 0x0111 +0xd1 0x0110 +0xd2 0x010e +0xd3 0x00cb +0xd4 0x010f +0xd5 0x0147 +0xd6 0x00cd +0xd7 0x00ce +0xd8 0x011b +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x0162 +0xde 0x016e +0xdf 0x2580 +0xe0 0x00d3 +0xe1 0x00df +0xe2 0x00d4 +0xe3 0x0143 +0xe4 0x0144 +0xe5 0x0148 +0xe6 0x0160 +0xe7 0x0161 +0xe8 0x0154 +0xe9 0x00da +0xea 0x0155 +0xeb 0x0170 +0xec 0x00fd +0xed 0x00dd +0xee 0x0163 +0xef 0x00b4 +0xf0 0x00ad +0xf1 0x02dd +0xf2 0x02db +0xf3 0x02c7 +0xf4 0x02d8 +0xf5 0x00a7 +0xf6 0x00f7 +0xf7 0x00b8 +0xf8 0x00b0 +0xf9 0x00a8 +0xfa 0x02d9 +0xfb 0x0171 +0xfc 0x0158 +0xfd 0x0159 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm855.t b/tests/02ibm855.t new file mode 100644 index 0000000..bc6f53d --- /dev/null +++ b/tests/02ibm855.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM855', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM855', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM855'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM855', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0452 +0x81 0x0402 +0x82 0x0453 +0x83 0x0403 +0x84 0x0451 +0x85 0x0401 +0x86 0x0454 +0x87 0x0404 +0x88 0x0455 +0x89 0x0405 +0x8a 0x0456 +0x8b 0x0406 +0x8c 0x0457 +0x8d 0x0407 +0x8e 0x0458 +0x8f 0x0408 +0x90 0x0459 +0x91 0x0409 +0x92 0x045a +0x93 0x040a +0x94 0x045b +0x95 0x040b +0x96 0x045c +0x97 0x040c +0x98 0x045e +0x99 0x040e +0x9a 0x045f +0x9b 0x040f +0x9c 0x044e +0x9d 0x042e +0x9e 0x044a +0x9f 0x042a +0xa0 0x0430 +0xa1 0x0410 +0xa2 0x0431 +0xa3 0x0411 +0xa4 0x0446 +0xa5 0x0426 +0xa6 0x0434 +0xa7 0x0414 +0xa8 0x0435 +0xa9 0x0415 +0xaa 0x0444 +0xab 0x0424 +0xac 0x0433 +0xad 0x0413 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x0445 +0xb6 0x0425 +0xb7 0x0438 +0xb8 0x0418 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x0439 +0xbe 0x0419 +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x043a +0xc7 0x041a +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x00a4 +0xd0 0x043b +0xd1 0x041b +0xd2 0x043c +0xd3 0x041c +0xd4 0x043d +0xd5 0x041d +0xd6 0x043e +0xd7 0x041e +0xd8 0x043f +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x041f +0xde 0x044f +0xdf 0x2580 +0xe0 0x042f +0xe1 0x0440 +0xe2 0x0420 +0xe3 0x0441 +0xe4 0x0421 +0xe5 0x0442 +0xe6 0x0422 +0xe7 0x0443 +0xe8 0x0423 +0xe9 0x0436 +0xea 0x0416 +0xeb 0x0432 +0xec 0x0412 +0xed 0x044c +0xee 0x042c +0xef 0x2116 +0xf0 0x00ad +0xf1 0x044b +0xf2 0x042b +0xf3 0x0437 +0xf4 0x0417 +0xf5 0x0448 +0xf6 0x0428 +0xf7 0x044d +0xf8 0x042d +0xf9 0x0449 +0xfa 0x0429 +0xfb 0x0447 +0xfc 0x0427 +0xfd 0x00a7 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm857.t b/tests/02ibm857.t new file mode 100644 index 0000000..d95237f --- /dev/null +++ b/tests/02ibm857.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM857', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM857', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM857'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM857', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x00e0 +0x86 0x00e5 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00ef +0x8c 0x00ee +0x8d 0x0131 +0x8e 0x00c4 +0x8f 0x00c5 +0x90 0x00c9 +0x91 0x00e6 +0x92 0x00c6 +0x93 0x00f4 +0x94 0x00f6 +0x95 0x00f2 +0x96 0x00fb +0x97 0x00f9 +0x98 0x0130 +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x00f8 +0x9c 0x00a3 +0x9d 0x00d8 +0x9e 0x015e +0x9f 0x015f +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00f1 +0xa5 0x00d1 +0xa6 0x011e +0xa7 0x011f +0xa8 0x00bf +0xa9 0x00ae +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x00c1 +0xb6 0x00c2 +0xb7 0x00c0 +0xb8 0x00a9 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x00a2 +0xbe 0x00a5 +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x00e3 +0xc7 0x00c3 +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x00a4 +0xd0 0x00ba +0xd1 0x00aa +0xd2 0x00ca +0xd3 0x00cb +0xd4 0x00c8 +0xd6 0xfffd +0xd6 0x00cd +0xd7 0x00ce +0xd8 0x00cf +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x00a6 +0xde 0x00cc +0xdf 0x2580 +0xe0 0x00d3 +0xe1 0x00df +0xe2 0x00d4 +0xe3 0x00d2 +0xe4 0x00f5 +0xe5 0x00d5 +0xe6 0x00b5 +0xe8 0xfffd +0xe8 0x00d7 +0xe9 0x00da +0xea 0x00db +0xeb 0x00d9 +0xec 0x00ec +0xed 0x00ff +0xee 0x00af +0xef 0x00b4 +0xf0 0x00ad +0xf1 0x00b1 +0xf3 0xfffd +0xf3 0x00be +0xf4 0x00b6 +0xf5 0x00a7 +0xf6 0x00f7 +0xf7 0x00b8 +0xf8 0x00b0 +0xf9 0x00a8 +0xfa 0x00b7 +0xfb 0x00b9 +0xfc 0x00b3 +0xfd 0x00b2 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm860.t b/tests/02ibm860.t new file mode 100644 index 0000000..d203fce --- /dev/null +++ b/tests/02ibm860.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM860', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM860', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM860'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM860', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e3 +0x85 0x00e0 +0x86 0x00c1 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00ca +0x8a 0x00e8 +0x8b 0x00cd +0x8c 0x00d4 +0x8d 0x00ec +0x8e 0x00c3 +0x8f 0x00c2 +0x90 0x00c9 +0x91 0x00c0 +0x92 0x00c8 +0x93 0x00f4 +0x94 0x00f5 +0x95 0x00f2 +0x96 0x00da +0x97 0x00f9 +0x98 0x00cc +0x99 0x00d5 +0x9a 0x00dc +0x9b 0x00a2 +0x9c 0x00a3 +0x9d 0x00d9 +0x9e 0x20a7 +0x9f 0x00d3 +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00f1 +0xa5 0x00d1 +0xa6 0x00aa +0xa7 0x00ba +0xa8 0x00bf +0xa9 0x00d2 +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x2561 +0xb6 0x2562 +0xb7 0x2556 +0xb8 0x2555 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x255c +0xbe 0x255b +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x255e +0xc7 0x255f +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x2567 +0xd0 0x2568 +0xd1 0x2564 +0xd2 0x2565 +0xd3 0x2559 +0xd4 0x2558 +0xd5 0x2552 +0xd6 0x2553 +0xd7 0x256b +0xd8 0x256a +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x258c +0xde 0x2590 +0xdf 0x2580 +0xe0 0x03b1 +0xe1 0x00df +0xe2 0x0393 +0xe3 0x03c0 +0xe4 0x03a3 +0xe5 0x03c3 +0xe6 0x00b5 +0xe7 0x03c4 +0xe8 0x03a6 +0xe9 0x0398 +0xea 0x03a9 +0xeb 0x03b4 +0xec 0x221e +0xed 0x03c6 +0xee 0x03b5 +0xef 0x2229 +0xf0 0x2261 +0xf1 0x00b1 +0xf2 0x2265 +0xf3 0x2264 +0xf4 0x2320 +0xf5 0x2321 +0xf6 0x00f7 +0xf7 0x2248 +0xf8 0x00b0 +0xf9 0x2219 +0xfa 0x00b7 +0xfb 0x221a +0xfc 0x207f +0xfd 0x00b2 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm861.t b/tests/02ibm861.t new file mode 100644 index 0000000..e697008 --- /dev/null +++ b/tests/02ibm861.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM861', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM861', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM861'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM861', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x00e0 +0x86 0x00e5 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00d0 +0x8c 0x00f0 +0x8d 0x00de +0x8e 0x00c4 +0x8f 0x00c5 +0x90 0x00c9 +0x91 0x00e6 +0x92 0x00c6 +0x93 0x00f4 +0x94 0x00f6 +0x95 0x00fe +0x96 0x00fb +0x97 0x00dd +0x98 0x00fd +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x00f8 +0x9c 0x00a3 +0x9d 0x00d8 +0x9e 0x20a7 +0x9f 0x0192 +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00c1 +0xa5 0x00cd +0xa6 0x00d3 +0xa7 0x00da +0xa8 0x00bf +0xa9 0x2310 +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x2561 +0xb6 0x2562 +0xb7 0x2556 +0xb8 0x2555 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x255c +0xbe 0x255b +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x255e +0xc7 0x255f +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x2567 +0xd0 0x2568 +0xd1 0x2564 +0xd2 0x2565 +0xd3 0x2559 +0xd4 0x2558 +0xd5 0x2552 +0xd6 0x2553 +0xd7 0x256b +0xd8 0x256a +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x258c +0xde 0x2590 +0xdf 0x2580 +0xe0 0x03b1 +0xe1 0x00df +0xe2 0x0393 +0xe3 0x03c0 +0xe4 0x03a3 +0xe5 0x03c3 +0xe6 0x00b5 +0xe7 0x03c4 +0xe8 0x03a6 +0xe9 0x0398 +0xea 0x03a9 +0xeb 0x03b4 +0xec 0x221e +0xed 0x03c6 +0xee 0x03b5 +0xef 0x2229 +0xf0 0x2261 +0xf1 0x00b1 +0xf2 0x2265 +0xf3 0x2264 +0xf4 0x2320 +0xf5 0x2321 +0xf6 0x00f7 +0xf7 0x2248 +0xf8 0x00b0 +0xf9 0x2219 +0xfa 0x00b7 +0xfb 0x221a +0xfc 0x207f +0xfd 0x00b2 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm862.t b/tests/02ibm862.t new file mode 100644 index 0000000..5fee44e --- /dev/null +++ b/tests/02ibm862.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM862', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM862', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM862'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM862', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x05d0 +0x81 0x05d1 +0x82 0x05d2 +0x83 0x05d3 +0x84 0x05d4 +0x85 0x05d5 +0x86 0x05d6 +0x87 0x05d7 +0x88 0x05d8 +0x89 0x05d9 +0x8a 0x05da +0x8b 0x05db +0x8c 0x05dc +0x8d 0x05dd +0x8e 0x05de +0x8f 0x05df +0x90 0x05e0 +0x91 0x05e1 +0x92 0x05e2 +0x93 0x05e3 +0x94 0x05e4 +0x95 0x05e5 +0x96 0x05e6 +0x97 0x05e7 +0x98 0x05e8 +0x99 0x05e9 +0x9a 0x05ea +0x9b 0x00a2 +0x9c 0x00a3 +0x9d 0x00a5 +0x9e 0x20a7 +0x9f 0x0192 +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00f1 +0xa5 0x00d1 +0xa6 0x00aa +0xa7 0x00ba +0xa8 0x00bf +0xa9 0x2310 +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x2561 +0xb6 0x2562 +0xb7 0x2556 +0xb8 0x2555 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x255c +0xbe 0x255b +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x255e +0xc7 0x255f +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x2567 +0xd0 0x2568 +0xd1 0x2564 +0xd2 0x2565 +0xd3 0x2559 +0xd4 0x2558 +0xd5 0x2552 +0xd6 0x2553 +0xd7 0x256b +0xd8 0x256a +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x258c +0xde 0x2590 +0xdf 0x2580 +0xe0 0x03b1 +0xe1 0x00df +0xe2 0x0393 +0xe3 0x03c0 +0xe4 0x03a3 +0xe5 0x03c3 +0xe6 0x00b5 +0xe7 0x03c4 +0xe8 0x03a6 +0xe9 0x0398 +0xea 0x03a9 +0xeb 0x03b4 +0xec 0x221e +0xed 0x03c6 +0xee 0x03b5 +0xef 0x2229 +0xf0 0x2261 +0xf1 0x00b1 +0xf2 0x2265 +0xf3 0x2264 +0xf4 0x2320 +0xf5 0x2321 +0xf6 0x00f7 +0xf7 0x2248 +0xf8 0x00b0 +0xf9 0x2219 +0xfa 0x00b7 +0xfb 0x221a +0xfc 0x207f +0xfd 0x00b2 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm863.t b/tests/02ibm863.t new file mode 100644 index 0000000..539efc8 --- /dev/null +++ b/tests/02ibm863.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM863', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM863', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM863'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM863', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00c2 +0x85 0x00e0 +0x86 0x00b6 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00ef +0x8c 0x00ee +0x8d 0x2017 +0x8e 0x00c0 +0x8f 0x00a7 +0x90 0x00c9 +0x91 0x00c8 +0x92 0x00ca +0x93 0x00f4 +0x94 0x00cb +0x95 0x00cf +0x96 0x00fb +0x97 0x00f9 +0x98 0x00a4 +0x99 0x00d4 +0x9a 0x00dc +0x9b 0x00a2 +0x9c 0x00a3 +0x9d 0x00d9 +0x9e 0x00db +0x9f 0x0192 +0xa0 0x00a6 +0xa1 0x00b4 +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00a8 +0xa5 0x00b8 +0xa6 0x00b3 +0xa7 0x00af +0xa8 0x00ce +0xa9 0x2310 +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00be +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x2561 +0xb6 0x2562 +0xb7 0x2556 +0xb8 0x2555 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x255c +0xbe 0x255b +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x255e +0xc7 0x255f +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x2567 +0xd0 0x2568 +0xd1 0x2564 +0xd2 0x2565 +0xd3 0x2559 +0xd4 0x2558 +0xd5 0x2552 +0xd6 0x2553 +0xd7 0x256b +0xd8 0x256a +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x258c +0xde 0x2590 +0xdf 0x2580 +0xe0 0x03b1 +0xe1 0x00df +0xe2 0x0393 +0xe3 0x03c0 +0xe4 0x03a3 +0xe5 0x03c3 +0xe6 0x00b5 +0xe7 0x03c4 +0xe8 0x03a6 +0xe9 0x0398 +0xea 0x03a9 +0xeb 0x03b4 +0xec 0x221e +0xed 0x03c6 +0xee 0x03b5 +0xef 0x2229 +0xf0 0x2261 +0xf1 0x00b1 +0xf2 0x2265 +0xf3 0x2264 +0xf4 0x2320 +0xf5 0x2321 +0xf6 0x00f7 +0xf7 0x2248 +0xf8 0x00b0 +0xf9 0x2219 +0xfa 0x00b7 +0xfb 0x221a +0xfc 0x207f +0xfd 0x00b2 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm864.t b/tests/02ibm864.t new file mode 100644 index 0000000..dc9b81d --- /dev/null +++ b/tests/02ibm864.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM864', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM864', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM864'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM864', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x066a +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00b0 +0x81 0x00b7 +0x82 0x2219 +0x83 0x221a +0x84 0x2592 +0x85 0x2500 +0x86 0x2502 +0x87 0x253c +0x88 0x2524 +0x89 0x252c +0x8a 0x251c +0x8b 0x2534 +0x8c 0x2510 +0x8d 0x250c +0x8e 0x2514 +0x8f 0x2518 +0x90 0x03b2 +0x91 0x221e +0x92 0x03c6 +0x93 0x00b1 +0x94 0x00bd +0x95 0x00bc +0x96 0x2248 +0x97 0x00ab +0x98 0x00bb +0x99 0xfef7 +0x9a 0xfef8 +0x9d 0xfffd +0x9d 0xfffd +0x9d 0xfefb +0x9e 0xfefc +0xa0 0xfffd +0xa0 0x00a0 +0xa1 0x00ad +0xa2 0xfe82 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0xfe84 +0xa8 0xfffd +0xa8 0xfffd +0xa8 0xfe8e +0xa9 0xfe8f +0xaa 0xfe95 +0xab 0xfe99 +0xac 0x060c +0xad 0xfe9d +0xae 0xfea1 +0xaf 0xfea5 +0xb0 0x0660 +0xb1 0x0661 +0xb2 0x0662 +0xb3 0x0663 +0xb4 0x0664 +0xb5 0x0665 +0xb6 0x0666 +0xb7 0x0667 +0xb8 0x0668 +0xb9 0x0669 +0xba 0xfed1 +0xbb 0x061b +0xbc 0xfeb1 +0xbd 0xfeb5 +0xbe 0xfeb9 +0xbf 0x061f +0xc0 0x00a2 +0xc1 0xfe80 +0xc2 0xfe81 +0xc3 0xfe83 +0xc4 0xfe85 +0xc5 0xfeca +0xc6 0xfe8b +0xc7 0xfe8d +0xc8 0xfe91 +0xc9 0xfe93 +0xca 0xfe97 +0xcb 0xfe9b +0xcc 0xfe9f +0xcd 0xfea3 +0xce 0xfea7 +0xcf 0xfea9 +0xd0 0xfeab +0xd1 0xfead +0xd2 0xfeaf +0xd3 0xfeb3 +0xd4 0xfeb7 +0xd5 0xfebb +0xd6 0xfebf +0xd7 0xfec1 +0xd8 0xfec5 +0xd9 0xfecb +0xda 0xfecf +0xdb 0x00a6 +0xdc 0x00ac +0xdd 0x00f7 +0xde 0x00d7 +0xdf 0xfec9 +0xe0 0x0640 +0xe1 0xfed3 +0xe2 0xfed7 +0xe3 0xfedb +0xe4 0xfedf +0xe5 0xfee3 +0xe6 0xfee7 +0xe7 0xfeeb +0xe8 0xfeed +0xe9 0xfeef +0xea 0xfef3 +0xeb 0xfebd +0xec 0xfecc +0xed 0xfece +0xee 0xfecd +0xef 0xfee1 +0xf0 0xfe7d +0xf1 0x0651 +0xf2 0xfee5 +0xf3 0xfee9 +0xf4 0xfeec +0xf5 0xfef0 +0xf6 0xfef2 +0xf7 0xfed0 +0xf8 0xfed5 +0xf9 0xfef5 +0xfa 0xfef6 +0xfb 0xfedd +0xfc 0xfed9 +0xfd 0xfef1 +0xfe 0x25a0 +0xff 0xfffd diff --git a/tests/02ibm865.t b/tests/02ibm865.t new file mode 100644 index 0000000..1772c57 --- /dev/null +++ b/tests/02ibm865.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM865', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM865', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM865'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM865', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c7 +0x81 0x00fc +0x82 0x00e9 +0x83 0x00e2 +0x84 0x00e4 +0x85 0x00e0 +0x86 0x00e5 +0x87 0x00e7 +0x88 0x00ea +0x89 0x00eb +0x8a 0x00e8 +0x8b 0x00ef +0x8c 0x00ee +0x8d 0x00ec +0x8e 0x00c4 +0x8f 0x00c5 +0x90 0x00c9 +0x91 0x00e6 +0x92 0x00c6 +0x93 0x00f4 +0x94 0x00f6 +0x95 0x00f2 +0x96 0x00fb +0x97 0x00f9 +0x98 0x00ff +0x99 0x00d6 +0x9a 0x00dc +0x9b 0x00f8 +0x9c 0x00a3 +0x9d 0x00d8 +0x9e 0x20a7 +0x9f 0x0192 +0xa0 0x00e1 +0xa1 0x00ed +0xa2 0x00f3 +0xa3 0x00fa +0xa4 0x00f1 +0xa5 0x00d1 +0xa6 0x00aa +0xa7 0x00ba +0xa8 0x00bf +0xa9 0x2310 +0xaa 0x00ac +0xab 0x00bd +0xac 0x00bc +0xad 0x00a1 +0xae 0x00ab +0xaf 0x00a4 +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x2561 +0xb6 0x2562 +0xb7 0x2556 +0xb8 0x2555 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x255c +0xbe 0x255b +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x255e +0xc7 0x255f +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x2567 +0xd0 0x2568 +0xd1 0x2564 +0xd2 0x2565 +0xd3 0x2559 +0xd4 0x2558 +0xd5 0x2552 +0xd6 0x2553 +0xd7 0x256b +0xd8 0x256a +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x258c +0xde 0x2590 +0xdf 0x2580 +0xe0 0x03b1 +0xe1 0x00df +0xe2 0x0393 +0xe3 0x03c0 +0xe4 0x03a3 +0xe5 0x03c3 +0xe6 0x00b5 +0xe7 0x03c4 +0xe8 0x03a6 +0xe9 0x0398 +0xea 0x03a9 +0xeb 0x03b4 +0xec 0x221e +0xed 0x03c6 +0xee 0x03b5 +0xef 0x2229 +0xf0 0x2261 +0xf1 0x00b1 +0xf2 0x2265 +0xf3 0x2264 +0xf4 0x2320 +0xf5 0x2321 +0xf6 0x00f7 +0xf7 0x2248 +0xf8 0x00b0 +0xf9 0x2219 +0xfa 0x00b7 +0xfb 0x221a +0xfc 0x207f +0xfd 0x00b2 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm866.t b/tests/02ibm866.t new file mode 100644 index 0000000..9dce235 --- /dev/null +++ b/tests/02ibm866.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM866', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM866', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM866'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM866', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0410 +0x81 0x0411 +0x82 0x0412 +0x83 0x0413 +0x84 0x0414 +0x85 0x0415 +0x86 0x0416 +0x87 0x0417 +0x88 0x0418 +0x89 0x0419 +0x8a 0x041a +0x8b 0x041b +0x8c 0x041c +0x8d 0x041d +0x8e 0x041e +0x8f 0x041f +0x90 0x0420 +0x91 0x0421 +0x92 0x0422 +0x93 0x0423 +0x94 0x0424 +0x95 0x0425 +0x96 0x0426 +0x97 0x0427 +0x98 0x0428 +0x99 0x0429 +0x9a 0x042a +0x9b 0x042b +0x9c 0x042c +0x9d 0x042d +0x9e 0x042e +0x9f 0x042f +0xa0 0x0430 +0xa1 0x0431 +0xa2 0x0432 +0xa3 0x0433 +0xa4 0x0434 +0xa5 0x0435 +0xa6 0x0436 +0xa7 0x0437 +0xa8 0x0438 +0xa9 0x0439 +0xaa 0x043a +0xab 0x043b +0xac 0x043c +0xad 0x043d +0xae 0x043e +0xaf 0x043f +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x2561 +0xb6 0x2562 +0xb7 0x2556 +0xb8 0x2555 +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x255c +0xbe 0x255b +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x255e +0xc7 0x255f +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x2567 +0xd0 0x2568 +0xd1 0x2564 +0xd2 0x2565 +0xd3 0x2559 +0xd4 0x2558 +0xd5 0x2552 +0xd6 0x2553 +0xd7 0x256b +0xd8 0x256a +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x258c +0xde 0x2590 +0xdf 0x2580 +0xe0 0x0440 +0xe1 0x0441 +0xe2 0x0442 +0xe3 0x0443 +0xe4 0x0444 +0xe5 0x0445 +0xe6 0x0446 +0xe7 0x0447 +0xe8 0x0448 +0xe9 0x0449 +0xea 0x044a +0xeb 0x044b +0xec 0x044c +0xed 0x044d +0xee 0x044e +0xef 0x044f +0xf0 0x0401 +0xf1 0x0451 +0xf2 0x0404 +0xf3 0x0454 +0xf4 0x0407 +0xf5 0x0457 +0xf6 0x040e +0xf7 0x045e +0xf8 0x00b0 +0xf9 0x2219 +0xfa 0x00b7 +0xfb 0x221a +0xfc 0x2116 +0xfd 0x00a4 +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm868.t b/tests/02ibm868.t new file mode 100644 index 0000000..5f10704 --- /dev/null +++ b/tests/02ibm868.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM868', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM868', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM868'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x8c"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM868', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0660 +0x81 0x0661 +0x82 0x0662 +0x83 0x0663 +0x84 0x0664 +0x85 0x0665 +0x86 0x0666 +0x87 0x0667 +0x88 0x0668 +0x89 0x0669 +0x8a 0x060c +0x8b 0x061b +0x8c 0x061f +0x8d 0x0622 +0x8e 0x0627 +0x8f 0xfe8e +0x90 0xe016 +0x91 0x0628 +0x92 0xfe91 +0x93 0x067e +0x95 0xfffd +0x95 0x0629 +0x96 0x062a +0x97 0xfe97 +0x9a 0xfffd +0x9a 0xfffd +0x9a 0x062b +0x9b 0xfe9b +0x9c 0x062c +0x9d 0xfe9f +0xa0 0xfffd +0xa0 0xfffd +0xa0 0x062d +0xa1 0xfea3 +0xa2 0x062e +0xa3 0xfea7 +0xa4 0x062f +0xa6 0xfffd +0xa6 0x0630 +0xa7 0x0631 +0xa9 0xfffd +0xa9 0x0632 +0xab 0xfffd +0xab 0x0633 +0xac 0xfeb3 +0xad 0x0634 +0xae 0x00ab +0xaf 0x00bb +0xb0 0xfeb7 +0xb1 0x0635 +0xb2 0x2591 +0xb3 0x2592 +0xb4 0x2593 +0xb5 0x2502 +0xb6 0x2524 +0xb7 0xfebb +0xb8 0x0636 +0xb9 0xfebf +0xba 0x0637 +0xbb 0x2563 +0xbc 0x2551 +0xbd 0x2557 +0xbe 0x255d +0xbf 0x0638 +0xc0 0x0639 +0xc1 0x2510 +0xc2 0x2514 +0xc3 0x2534 +0xc4 0x252c +0xc5 0x251c +0xc6 0x2500 +0xc7 0x253c +0xc8 0xfeca +0xc9 0xfecb +0xca 0x255a +0xcb 0x2554 +0xcc 0x2569 +0xcd 0x2566 +0xce 0x2560 +0xcf 0x2550 +0xd0 0x256c +0xd1 0xfecc +0xd2 0x063a +0xd3 0xfece +0xd4 0xfecf +0xd5 0xfed0 +0xd6 0x0641 +0xd7 0xfed3 +0xd8 0x0642 +0xd9 0xfed7 +0xda 0xfeda +0xdb 0x2518 +0xdc 0x250c +0xdd 0x2588 +0xde 0x2580 +0xdf 0xfedb +0xe1 0xfffd +0xe1 0x2584 +0xe3 0xfffd +0xe3 0x0644 +0xe4 0xfede +0xe5 0xfee0 +0xe6 0x0645 +0xe7 0xfee3 +0xe9 0xfffd +0xe9 0x0646 +0xea 0xfee7 +0xec 0xfffd +0xec 0x0648 +0xf1 0xfffd +0xf1 0xfffd +0xf1 0xfffd +0xf1 0xfffd +0xf1 0x0621 +0xf2 0x00ad +0xfb 0xfffd +0xfb 0xfffd +0xfb 0xfffd +0xfb 0xfffd +0xfb 0xfffd +0xfb 0xfffd +0xfb 0xfffd +0xfb 0xfffd +0xfb 0x0651 +0xfc 0xfe7d +0xfe 0xfffd +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm869.t b/tests/02ibm869.t new file mode 100644 index 0000000..3c41bba --- /dev/null +++ b/tests/02ibm869.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM869', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM869', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM869'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM869', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x86 0xfffd +0x86 0xfffd +0x86 0xfffd +0x86 0xfffd +0x86 0xfffd +0x86 0xfffd +0x86 0x0386 +0x88 0xfffd +0x88 0x00b7 +0x89 0x00ac +0x8a 0x00a6 +0x8b 0x2018 +0x8c 0x2019 +0x8d 0x0388 +0x8e 0x2015 +0x8f 0x0389 +0x90 0x038a +0x91 0x03aa +0x92 0x038c +0x95 0xfffd +0x95 0xfffd +0x95 0x038e +0x96 0x03ab +0x97 0x00a9 +0x98 0x038f +0x99 0x00b2 +0x9a 0x00b3 +0x9b 0x03ac +0x9c 0x00a3 +0x9d 0x03ad +0x9e 0x03ae +0x9f 0x03af +0xa0 0x03ca +0xa1 0x0390 +0xa2 0x03cc +0xa3 0x03cd +0xa4 0x0391 +0xa5 0x0392 +0xa6 0x0393 +0xa7 0x0394 +0xa8 0x0395 +0xa9 0x0396 +0xaa 0x0397 +0xab 0x00bd +0xac 0x0398 +0xad 0x0399 +0xae 0x00ab +0xaf 0x00bb +0xb0 0x2591 +0xb1 0x2592 +0xb2 0x2593 +0xb3 0x2502 +0xb4 0x2524 +0xb5 0x039a +0xb6 0x039b +0xb7 0x039c +0xb8 0x039d +0xb9 0x2563 +0xba 0x2551 +0xbb 0x2557 +0xbc 0x255d +0xbd 0x039e +0xbe 0x039f +0xbf 0x2510 +0xc0 0x2514 +0xc1 0x2534 +0xc2 0x252c +0xc3 0x251c +0xc4 0x2500 +0xc5 0x253c +0xc6 0x03a0 +0xc7 0x03a1 +0xc8 0x255a +0xc9 0x2554 +0xca 0x2569 +0xcb 0x2566 +0xcc 0x2560 +0xcd 0x2550 +0xce 0x256c +0xcf 0x03a3 +0xd0 0x03a4 +0xd1 0x03a5 +0xd2 0x03a6 +0xd3 0x03a7 +0xd4 0x03a8 +0xd5 0x03a9 +0xd6 0x03b1 +0xd7 0x03b2 +0xd8 0x03b3 +0xd9 0x2518 +0xda 0x250c +0xdb 0x2588 +0xdc 0x2584 +0xdd 0x03b4 +0xde 0x03b5 +0xdf 0x2580 +0xe0 0x03b6 +0xe1 0x03b7 +0xe2 0x03b8 +0xe3 0x03b9 +0xe4 0x03ba +0xe5 0x03bb +0xe6 0x03bc +0xe7 0x03bd +0xe8 0x03be +0xe9 0x03bf +0xea 0x03c0 +0xeb 0x03c1 +0xec 0x03c3 +0xed 0x03c2 +0xee 0x03c4 +0xef 0x0384 +0xf0 0x00ad +0xf1 0x00b1 +0xf2 0x03c5 +0xf3 0x03c6 +0xf4 0x03c7 +0xf5 0x00a7 +0xf6 0x03c8 +0xf7 0x0385 +0xf8 0x00b0 +0xf9 0x00a8 +0xfa 0x03c9 +0xfb 0x03cb +0xfc 0x03b0 +0xfd 0x03ce +0xfe 0x25a0 +0xff 0x00a0 diff --git a/tests/02ibm870.t b/tests/02ibm870.t new file mode 100644 index 0000000..af4d033 --- /dev/null +++ b/tests/02ibm870.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM870', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM870', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM870'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM870', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x43 0xfffd +0x43 0x00e4 +0x45 0xfffd +0x45 0x00e1 +0x46 0x0103 +0x47 0x010d +0x48 0x00e7 +0x49 0x0107 +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x00e9 +0x53 0xfffd +0x53 0x00eb +0x54 0x016f +0x55 0x00ed +0x57 0xfffd +0x57 0x013e +0x58 0x013a +0x59 0x00df +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x63 0xfffd +0x63 0x00c4 +0x64 0x02dd +0x65 0x00c1 +0x67 0xfffd +0x67 0x010c +0x68 0x00c7 +0x69 0x0106 +0x6a 0x007c +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x02c7 +0x71 0x00c9 +0x73 0xfffd +0x73 0x00cb +0x74 0x016e +0x75 0x00cd +0x77 0xfffd +0x77 0x013d +0x78 0x0139 +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x02d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x015b +0x8b 0x0148 +0x8c 0x0111 +0x8d 0x00fd +0x8e 0x0159 +0x90 0xfffd +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x0142 +0x9b 0x0144 +0x9c 0x0161 +0x9d 0x00b8 +0x9e 0x02db +0x9f 0x00a4 +0xa0 0x0105 +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x015a +0xab 0x0147 +0xac 0x0110 +0xad 0x00dd +0xae 0x0158 +0xb0 0xfffd +0xb0 0x00b7 +0xb1 0x0104 +0xb2 0x017c +0xb4 0xfffd +0xb4 0x017b +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x017e +0xb8 0x017a +0xb9 0x017d +0xba 0x0179 +0xbb 0x0143 +0xbc 0x0160 +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x00f6 +0xcd 0x0155 +0xce 0x00f3 +0xcf 0x0151 +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x011a +0xdb 0x0171 +0xdc 0x00fc +0xdd 0x0165 +0xde 0x00fa +0xdf 0x011b +0xe0 0x005c +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x010f +0xeb 0x00d4 +0xec 0x00d6 +0xed 0x0154 +0xee 0x00d3 +0xef 0x0150 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x010e +0xfb 0x0170 +0xfc 0x00dc +0xfd 0x0164 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm871.t b/tests/02ibm871.t new file mode 100644 index 0000000..1e20c3f --- /dev/null +++ b/tests/02ibm871.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM871', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM871', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM871'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM871', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x46 0x00e3 +0x47 0x00e5 +0x48 0x00e7 +0x49 0x00f1 +0x4a 0x00fe +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x00c6 +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x00d6 +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x66 0x00c3 +0x67 0x00c5 +0x68 0x00c7 +0x69 0x00d1 +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00f8 +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x00f0 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x00d0 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x00d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x00ab +0x8b 0x00bb +0x8c 0x0060 +0x8d 0x00fd +0x8e 0x007b +0x8f 0x00b1 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x00aa +0x9b 0x00ba +0x9c 0x007d +0x9d 0x00b8 +0x9e 0x005d +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x00f6 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x00a1 +0xab 0x00bf +0xac 0x0040 +0xad 0x00dd +0xae 0x005b +0xaf 0x00ae +0xb0 0x00a2 +0xb1 0x00a3 +0xb2 0x00a5 +0xb3 0x00b7 +0xb4 0x00a9 +0xb5 0x00a7 +0xb6 0x00b6 +0xb7 0x00bc +0xb8 0x00bd +0xb9 0x00be +0xba 0x00ac +0xbb 0x007c +0xbc 0x00af +0xbd 0x00a8 +0xbe 0x005c +0xbf 0x00d7 +0xc0 0x00de +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x007e +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x00f5 +0xd0 0x00e6 +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b9 +0xdb 0x00fb +0xdc 0x00fc +0xdd 0x00f9 +0xde 0x00fa +0xdf 0x00ff +0xe0 0x00b4 +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x005e +0xed 0x00d2 +0xee 0x00d3 +0xef 0x00d5 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x00dc +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm874.t b/tests/02ibm874.t new file mode 100644 index 0000000..e478714 --- /dev/null +++ b/tests/02ibm874.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM874', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM874', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM874'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM874', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x20ac +0x85 0xfffd +0x85 0xfffd +0x85 0xfffd +0x85 0xfffd +0x85 0x2026 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0xfffd +0xa0 0x00a0 +0xa1 0x0e01 +0xa2 0x0e02 +0xa3 0x0e03 +0xa4 0x0e04 +0xa5 0x0e05 +0xa6 0x0e06 +0xa7 0x0e07 +0xa8 0x0e08 +0xa9 0x0e09 +0xaa 0x0e0a +0xab 0x0e0b +0xac 0x0e0c +0xad 0x0e0d +0xae 0x0e0e +0xaf 0x0e0f +0xb0 0x0e10 +0xb1 0x0e11 +0xb2 0x0e12 +0xb3 0x0e13 +0xb4 0x0e14 +0xb5 0x0e15 +0xb6 0x0e16 +0xb7 0x0e17 +0xb8 0x0e18 +0xb9 0x0e19 +0xba 0x0e1a +0xbb 0x0e1b +0xbc 0x0e1c +0xbd 0x0e1d +0xbe 0x0e1e +0xbf 0x0e1f +0xc0 0x0e20 +0xc1 0x0e21 +0xc2 0x0e22 +0xc3 0x0e23 +0xc4 0x0e24 +0xc5 0x0e25 +0xc6 0x0e26 +0xc7 0x0e27 +0xc8 0x0e28 +0xc9 0x0e29 +0xca 0x0e2a +0xcb 0x0e2b +0xcc 0x0e2c +0xcd 0x0e2d +0xce 0x0e2e +0xcf 0x0e2f +0xd0 0x0e30 +0xd1 0x0e31 +0xd2 0x0e32 +0xd3 0x0e33 +0xd4 0x0e34 +0xd5 0x0e35 +0xd6 0x0e36 +0xd7 0x0e37 +0xd8 0x0e38 +0xd9 0x0e39 +0xda 0x0e3a +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0x0e3f +0xe0 0x0e40 +0xe1 0x0e41 +0xe2 0x0e42 +0xe3 0x0e43 +0xe4 0x0e44 +0xe5 0x0e45 +0xe6 0x0e46 +0xe7 0x0e47 +0xe8 0x0e48 +0xe9 0x0e49 +0xea 0x0e4a +0xeb 0x0e4b +0xec 0x0e4c +0xed 0x0e4d +0xee 0x0e4e +0xef 0x0e4f +0xf0 0x0e50 +0xf1 0x0e51 +0xf2 0x0e52 +0xf3 0x0e53 +0xf4 0x0e54 +0xf5 0x0e55 +0xf6 0x0e56 +0xf7 0x0e57 +0xf8 0x0e58 +0xf9 0x0e59 +0xfa 0x0e5a +0xfb 0x0e5b +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02ibm875.t b/tests/02ibm875.t new file mode 100644 index 0000000..9582145 --- /dev/null +++ b/tests/02ibm875.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM875', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM875', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM875'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM875', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x0391 +0x42 0x0392 +0x43 0x0393 +0x44 0x0394 +0x45 0x0395 +0x46 0x0396 +0x47 0x0397 +0x48 0x0398 +0x49 0x0399 +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x039a +0x52 0x039b +0x53 0x039c +0x54 0x039d +0x55 0x039e +0x56 0x039f +0x57 0x03a0 +0x58 0x03a1 +0x59 0x03a3 +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x03a4 +0x63 0x03a5 +0x64 0x03a6 +0x65 0x03a7 +0x66 0x03a8 +0x67 0x03a9 +0x68 0x03aa +0x69 0x03ab +0x6b 0xfffd +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x00a8 +0x71 0x0386 +0x72 0x0388 +0x73 0x0389 +0x74 0x2207 +0x75 0x038a +0x76 0x038c +0x77 0x038e +0x78 0x038f +0x79 0x0060 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x0385 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x03b1 +0x8b 0x03b2 +0x8c 0x03b3 +0x8d 0x03b4 +0x8e 0x03b5 +0x8f 0x03b6 +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x03b7 +0x9b 0x03b8 +0x9c 0x03b9 +0x9d 0x03ba +0x9e 0x03bb +0x9f 0x03bc +0xa0 0x00b4 +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x03bd +0xab 0x03be +0xac 0x03bf +0xad 0x03c0 +0xae 0x03c1 +0xaf 0x03c3 +0xb0 0x00a3 +0xb1 0x03ac +0xb2 0x03ad +0xb3 0x03ae +0xb4 0x0390 +0xb5 0x03af +0xb6 0x03cc +0xb7 0x03cd +0xb8 0x03b0 +0xb9 0x03ce +0xba 0x03c2 +0xbb 0x03c4 +0xbc 0x03c5 +0xbd 0x03c6 +0xbe 0x03c7 +0xbf 0x03c8 +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x03c9 +0xcc 0x03ca +0xcd 0x03cb +0xce 0x2018 +0xcf 0x2015 +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x00b1 +0xdb 0x00bd +0xdd 0xfffd +0xdd 0x00b7 +0xde 0x2019 +0xdf 0x00a6 +0xe0 0x005c +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00a7 +0xee 0xfffd +0xee 0xfffd +0xee 0x00ab +0xef 0x00ac +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00a9 +0xfe 0xfffd +0xfe 0xfffd +0xfe 0x00bb +0xff 0x009f diff --git a/tests/02ibm880.t b/tests/02ibm880.t new file mode 100644 index 0000000..a9afd3c --- /dev/null +++ b/tests/02ibm880.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM880', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM880', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM880'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM880', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x42 0xfffd +0x42 0x0452 +0x43 0x0453 +0x44 0x0451 +0x46 0xfffd +0x46 0x0455 +0x47 0x0456 +0x48 0x0457 +0x49 0x0458 +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x0459 +0x52 0x045a +0x53 0x045b +0x54 0x045c +0x56 0xfffd +0x56 0x045f +0x57 0x042a +0x58 0x2116 +0x59 0x0402 +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x0403 +0x63 0x0401 +0x65 0xfffd +0x65 0x0405 +0x66 0x0406 +0x67 0x0407 +0x68 0x0408 +0x69 0x0409 +0x6a 0x00a6 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x040a +0x71 0x040b +0x72 0x040c +0x75 0xfffd +0x75 0xfffd +0x75 0x040f +0x76 0x044e +0x77 0x0430 +0x78 0x0431 +0x7a 0xfffd +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0x0446 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x0434 +0x8b 0x0435 +0x8c 0x0444 +0x8d 0x0433 +0x8e 0x0445 +0x8f 0x0438 +0x90 0x0439 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x043a +0x9b 0x043b +0x9c 0x043c +0x9d 0x043d +0x9e 0x043e +0x9f 0x043f +0xa0 0x044f +0xa2 0xfffd +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x0440 +0xab 0x0441 +0xac 0x0442 +0xad 0x0443 +0xae 0x0436 +0xaf 0x0432 +0xb0 0x044c +0xb1 0x044b +0xb2 0x0437 +0xb3 0x0448 +0xb4 0x044d +0xb5 0x0449 +0xb6 0x0447 +0xb7 0x044a +0xb8 0x042e +0xb9 0x0410 +0xba 0x0411 +0xbb 0x0426 +0xbc 0x0414 +0xbd 0x0415 +0xbe 0x0424 +0xbf 0x0413 +0xc1 0xfffd +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x0425 +0xcb 0x0418 +0xcc 0x0419 +0xcd 0x041a +0xce 0x041b +0xcf 0x041c +0xd1 0xfffd +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x041d +0xdb 0x041e +0xdc 0x041f +0xdd 0x042f +0xde 0x0420 +0xdf 0x0421 +0xe0 0x005c +0xe1 0x00a4 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x0422 +0xeb 0x0423 +0xec 0x0416 +0xed 0x0412 +0xee 0x042c +0xef 0x042b +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x0417 +0xfb 0x0428 +0xfc 0x042d +0xfd 0x0429 +0xfe 0x0427 +0xff 0x009f diff --git a/tests/02ibm891.t b/tests/02ibm891.t new file mode 100644 index 0000000..f58eac3 --- /dev/null +++ b/tests/02ibm891.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM891', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM891', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM891'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM891', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02ibm903.t b/tests/02ibm903.t new file mode 100644 index 0000000..1f4f164 --- /dev/null +++ b/tests/02ibm903.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM903', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM903', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM903'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM903', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02ibm904.t b/tests/02ibm904.t new file mode 100644 index 0000000..83dcd97 --- /dev/null +++ b/tests/02ibm904.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM904', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM904', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM904'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM904', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00a2 +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0x00ac +0xfe 0x00a6 +0xff 0xfffd diff --git a/tests/02ibm905.t b/tests/02ibm905.t new file mode 100644 index 0000000..2a1a4b0 --- /dev/null +++ b/tests/02ibm905.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM905', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM905', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM905'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM905', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x42 0xfffd +0x42 0x00e2 +0x43 0x00e4 +0x44 0x00e0 +0x45 0x00e1 +0x47 0xfffd +0x47 0x010b +0x48 0x007b +0x49 0x00f1 +0x4a 0x00c7 +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0x00e9 +0x52 0x00ea +0x53 0x00eb +0x54 0x00e8 +0x55 0x00ed +0x56 0x00ee +0x57 0x00ef +0x58 0x00ec +0x59 0x00df +0x5a 0x011e +0x5b 0x0130 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0x00c2 +0x63 0x00c4 +0x64 0x00c0 +0x65 0x00c1 +0x67 0xfffd +0x67 0x010a +0x68 0x005b +0x69 0x00d1 +0x6a 0x015f +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x71 0xfffd +0x71 0x00c9 +0x72 0x00ca +0x73 0x00cb +0x74 0x00c8 +0x75 0x00cd +0x76 0x00ce +0x77 0x00cf +0x78 0x00cc +0x79 0x0131 +0x7a 0x003a +0x7b 0x00d6 +0x7c 0x015e +0x7d 0x0027 +0x7e 0x003d +0x7f 0x00dc +0x80 0x02d8 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x0127 +0x8b 0x0109 +0x8c 0x015d +0x8d 0x016d +0x8f 0xfffd +0x8f 0x007c +0x90 0x00b0 +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x0125 +0x9b 0x011d +0x9c 0x0135 +0x9d 0x02db +0x9f 0xfffd +0x9f 0x00a4 +0xa0 0x00b5 +0xa1 0x00f6 +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0x0126 +0xab 0x0108 +0xac 0x015c +0xad 0x016c +0xaf 0xfffd +0xaf 0x0040 +0xb0 0x00b7 +0xb1 0x00a3 +0xb2 0x017c +0xb3 0x007d +0xb4 0x017b +0xb5 0x00a7 +0xb6 0x005d +0xb8 0xfffd +0xb8 0x00bd +0xb9 0x0024 +0xba 0x0124 +0xbb 0x011c +0xbc 0x0134 +0xbd 0x00a8 +0xbe 0x00b4 +0xbf 0x00d7 +0xc0 0x00e7 +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcb 0x00f4 +0xcc 0x007e +0xcd 0x00f2 +0xce 0x00f3 +0xcf 0x0121 +0xd0 0x011f +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0x0060 +0xdb 0x00fb +0xdc 0x005c +0xdd 0x00f9 +0xde 0x00fa +0xe0 0xfffd +0xe0 0x00fc +0xe1 0x00f7 +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x00b2 +0xeb 0x00d4 +0xec 0x0023 +0xed 0x00d2 +0xee 0x00d3 +0xef 0x0120 +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfa 0x00b3 +0xfb 0x00db +0xfc 0x0022 +0xfd 0x00d9 +0xfe 0x00da +0xff 0x009f diff --git a/tests/02ibm918.t b/tests/02ibm918.t new file mode 100644 index 0000000..eae8ecb --- /dev/null +++ b/tests/02ibm918.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IBM918', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IBM918', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM918'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x6f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IBM918', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x009c +0x05 0x0009 +0x06 0x0086 +0x07 0x007f +0x08 0x0097 +0x09 0x008d +0x0a 0x008e +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x009d +0x15 0x0085 +0x16 0x0008 +0x17 0x0087 +0x18 0x0018 +0x19 0x0019 +0x1a 0x0092 +0x1b 0x008f +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0080 +0x21 0x0081 +0x22 0x0082 +0x23 0x0083 +0x24 0x0084 +0x25 0x000a +0x26 0x0017 +0x27 0x001b +0x28 0x0088 +0x29 0x0089 +0x2a 0x008a +0x2b 0x008b +0x2c 0x008c +0x2d 0x0005 +0x2e 0x0006 +0x2f 0x0007 +0x30 0x0090 +0x31 0x0091 +0x32 0x0016 +0x33 0x0093 +0x34 0x0094 +0x35 0x0095 +0x36 0x0096 +0x37 0x0004 +0x38 0x0098 +0x39 0x0099 +0x3a 0x009a +0x3b 0x009b +0x3c 0x0014 +0x3d 0x0015 +0x3e 0x009e +0x3f 0x001a +0x40 0x0020 +0x41 0x00a0 +0x42 0x060c +0x43 0x061b +0x44 0x061f +0x45 0x0623 +0x46 0x0627 +0x47 0xfe8e +0x49 0xfffd +0x49 0x0628 +0x4a 0x005b +0x4b 0x002e +0x4c 0x003c +0x4d 0x0028 +0x4e 0x002b +0x4f 0x0021 +0x50 0x0026 +0x51 0xfe91 +0x52 0x067e +0x54 0xfffd +0x54 0x0629 +0x55 0x062a +0x56 0xfe97 +0x59 0xfffd +0x59 0xfffd +0x59 0x062b +0x5a 0x005d +0x5b 0x0024 +0x5c 0x002a +0x5d 0x0029 +0x5e 0x003b +0x5f 0x005e +0x60 0x002d +0x61 0x002f +0x62 0xfe9b +0x63 0x062c +0x64 0xfe9f +0x67 0xfffd +0x67 0xfffd +0x67 0x062d +0x68 0xfea3 +0x69 0x062e +0x6a 0x0060 +0x6b 0x002c +0x6c 0x0025 +0x6d 0x005f +0x6e 0x003e +0x6f 0x003f +0x70 0x0660 +0x71 0x0661 +0x72 0x0662 +0x73 0x0663 +0x74 0x0664 +0x75 0x0665 +0x76 0x0666 +0x77 0x0667 +0x78 0x0668 +0x79 0x0669 +0x7a 0x003a +0x7b 0x0023 +0x7c 0x0040 +0x7d 0x0027 +0x7e 0x003d +0x7f 0x0022 +0x80 0xfea7 +0x81 0x0061 +0x82 0x0062 +0x83 0x0063 +0x84 0x0064 +0x85 0x0065 +0x86 0x0066 +0x87 0x0067 +0x88 0x0068 +0x89 0x0069 +0x8a 0x062f +0x8c 0xfffd +0x8c 0x0630 +0x8d 0x0631 +0x8f 0xfffd +0x8f 0x0632 +0x91 0xfffd +0x91 0x006a +0x92 0x006b +0x93 0x006c +0x94 0x006d +0x95 0x006e +0x96 0x006f +0x97 0x0070 +0x98 0x0071 +0x99 0x0072 +0x9a 0x0633 +0x9b 0xfeb3 +0x9c 0x0634 +0x9d 0xfeb7 +0x9e 0x0635 +0x9f 0xfebb +0xa0 0x0636 +0xa1 0x007e +0xa2 0x0073 +0xa3 0x0074 +0xa4 0x0075 +0xa5 0x0076 +0xa6 0x0077 +0xa7 0x0078 +0xa8 0x0079 +0xa9 0x007a +0xaa 0xfebf +0xab 0x0637 +0xac 0x0638 +0xad 0x0639 +0xae 0xfeca +0xaf 0xfecb +0xb0 0xfecc +0xb1 0x063a +0xb2 0xfece +0xb3 0xfecf +0xb4 0xfed0 +0xb5 0x0641 +0xb6 0xfed3 +0xb7 0x0642 +0xb8 0xfed7 +0xb9 0x0643 +0xba 0xfedb +0xbb 0x007c +0xbe 0xfffd +0xbe 0xfffd +0xbe 0x0644 +0xbf 0xfede +0xc0 0x007b +0xc1 0x0041 +0xc2 0x0042 +0xc3 0x0043 +0xc4 0x0044 +0xc5 0x0045 +0xc6 0x0046 +0xc7 0x0047 +0xc8 0x0048 +0xc9 0x0049 +0xca 0x00ad +0xcc 0xfffd +0xcc 0x0645 +0xcd 0xfee3 +0xcf 0xfffd +0xcf 0x0646 +0xd0 0x007d +0xd1 0x004a +0xd2 0x004b +0xd3 0x004c +0xd4 0x004d +0xd5 0x004e +0xd6 0x004f +0xd7 0x0050 +0xd8 0x0051 +0xd9 0x0052 +0xda 0xfee7 +0xdc 0xfffd +0xdc 0x0648 +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x005c +0xe2 0xfffd +0xe2 0x0053 +0xe3 0x0054 +0xe4 0x0055 +0xe5 0x0056 +0xe6 0x0057 +0xe7 0x0058 +0xe8 0x0059 +0xe9 0x005a +0xea 0x0621 +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0xfffd +0xf0 0x0030 +0xf1 0x0031 +0xf2 0x0032 +0xf3 0x0033 +0xf4 0x0034 +0xf5 0x0035 +0xf6 0x0036 +0xf7 0x0037 +0xf8 0x0038 +0xf9 0x0039 +0xfd 0xfffd +0xfd 0xfffd +0xfd 0xfffd +0xfd 0x0651 +0xfe 0xfe7d +0xff 0x009f diff --git a/tests/02iec_p27-1.t b/tests/02iec_p27-1.t new file mode 100644 index 0000000..90c869c --- /dev/null +++ b/tests/02iec_p27-1.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'IEC_P27-1', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'IEC_P27-1', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IEC_P27-1'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'IEC_P27-1', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x02c7 +0xa1 0x2261 +0xa2 0x2227 +0xa3 0x2228 +0xa4 0x2229 +0xa5 0x222a +0xa6 0x2282 +0xa7 0x2283 +0xa8 0x21d0 +0xa9 0x21d2 +0xaa 0x2234 +0xab 0x2235 +0xac 0x2208 +0xad 0x220b +0xae 0x2286 +0xaf 0x2287 +0xb0 0x222b +0xb1 0x222e +0xb2 0x221e +0xb3 0x2207 +0xb4 0x2202 +0xb5 0x223c +0xb6 0x2248 +0xb7 0x2243 +0xb8 0x2245 +0xb9 0x2264 +0xba 0x2260 +0xbb 0x2265 +0xbc 0x2194 +0xbd 0x00ac +0xbe 0x2200 +0xbf 0x2203 +0xc0 0x05d0 +0xc1 0x25a1 +0xc2 0x2225 +0xc3 0x0393 +0xc4 0x0394 +0xc5 0x22a5 +0xc6 0x2220 +0xc7 0x221f +0xc8 0x0398 +0xc9 0x2329 +0xca 0x232a +0xcb 0x039b +0xcc 0x2032 +0xcd 0x2033 +0xce 0x039e +0xcf 0x2213 +0xd0 0x03a0 +0xd1 0x00b2 +0xd2 0x03a3 +0xd3 0x00d7 +0xd4 0x00b3 +0xd5 0x03a5 +0xd6 0x03a6 +0xd7 0x00b7 +0xd8 0x03a8 +0xd9 0x03a9 +0xda 0x2205 +0xdb 0x21c0 +0xdc 0x221a +0xdd 0x0192 +0xde 0x221d +0xdf 0x00b1 +0xe0 0x00b0 +0xe1 0x03b1 +0xe2 0x03b2 +0xe3 0x03b3 +0xe4 0x03b4 +0xe5 0x03b5 +0xe6 0x03b6 +0xe7 0x03b7 +0xe8 0x03b8 +0xe9 0x03b9 +0xea 0x03ba +0xeb 0x03bb +0xec 0x03bc +0xed 0x03bd +0xee 0x03be +0xef 0x2030 +0xf0 0x03c0 +0xf1 0x03c1 +0xf2 0x03c3 +0xf3 0x00f7 +0xf4 0x03c4 +0xf5 0x03c5 +0xf6 0x03c6 +0xf7 0x03c7 +0xf8 0x03c8 +0xf9 0x03c9 +0xfa 0x2020 +0xfb 0x2190 +0xfc 0x2191 +0xfd 0x2192 +0xfe 0x2193 +0xff 0x203e diff --git a/tests/02inis-8.t b/tests/02inis-8.t new file mode 100644 index 0000000..569632c --- /dev/null +++ b/tests/02inis-8.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'INIS-8', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'INIS-8', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'INIS-8'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'INIS-8', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0xfffd +0x3a 0x03b1 +0x3b 0x03b2 +0x3c 0x03b3 +0x3d 0x03b4 +0x3e 0x039e +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0xfffd +0x5e 0x2192 +0x5f 0x222b +0x60 0x2070 +0x61 0x00b9 +0x62 0x00b2 +0x63 0x00b3 +0x64 0x2074 +0x65 0x2075 +0x66 0x2076 +0x67 0x2077 +0x68 0x2078 +0x69 0x2079 +0x6a 0x207a +0x6b 0x207b +0x6c 0x30eb +0x6d 0x0394 +0x6e 0x039b +0x6f 0x03a9 +0x70 0x2080 +0x71 0x2081 +0x72 0x2082 +0x73 0x2083 +0x74 0x2084 +0x75 0x2085 +0x76 0x2086 +0x77 0x2087 +0x78 0x2088 +0x79 0x2089 +0x7a 0x03a3 +0x7b 0x03bc +0x7c 0x03bd +0x7d 0x03c9 +0x7e 0x03c0 +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02inis-cyrillic.t b/tests/02inis-cyrillic.t new file mode 100644 index 0000000..4e0d94e --- /dev/null +++ b/tests/02inis-cyrillic.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'INIS-CYRILLIC', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'INIS-CYRILLIC', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'INIS-CYRILLIC'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'INIS-CYRILLIC', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x2c 0xfffd +0x2c 0xfffd +0x2c 0xfffd +0x2c 0xfffd +0x2c 0xfffd +0x2c 0xfffd +0x2c 0xfffd +0x2c 0xfffd +0x2c 0xfffd +0x2c 0xfffd +0x2c 0xfffd +0x2c 0x221a +0x2e 0xfffd +0x2e 0x2192 +0x2f 0x222b +0x30 0x03b1 +0x31 0x03b2 +0x32 0x03b3 +0x33 0x03b4 +0x34 0x03a3 +0x35 0x03bc +0x36 0x03bd +0x37 0x03c9 +0x38 0x03c0 +0x39 0x039e +0x3a 0x0394 +0x3b 0x039b +0x3c 0x03a9 +0x3d 0x042a +0x3e 0x207b +0x3f 0x207a +0x40 0x044e +0x41 0x0430 +0x42 0x0431 +0x43 0x0446 +0x44 0x0434 +0x45 0x0435 +0x46 0x0444 +0x47 0x0433 +0x48 0x0445 +0x49 0x0438 +0x4a 0x0439 +0x4b 0x043a +0x4c 0x043b +0x4d 0x043c +0x4e 0x043d +0x4f 0x043e +0x50 0x043f +0x51 0x044f +0x52 0x0440 +0x53 0x0441 +0x54 0x0442 +0x55 0x0443 +0x56 0x0436 +0x57 0x0432 +0x58 0x044c +0x59 0x044b +0x5a 0x0437 +0x5b 0x0448 +0x5c 0x044d +0x5d 0x0449 +0x5e 0x0447 +0x5f 0x044a +0x60 0x042e +0x61 0x0410 +0x62 0x0411 +0x63 0x0426 +0x64 0x0414 +0x65 0x0415 +0x66 0x0424 +0x67 0x0413 +0x68 0x0425 +0x69 0x0418 +0x6a 0x0419 +0x6b 0x041a +0x6c 0x041b +0x6d 0x041c +0x6e 0x041d +0x6f 0x041e +0x70 0x041f +0x71 0x042f +0x72 0x0420 +0x73 0x0421 +0x74 0x0422 +0x75 0x0423 +0x76 0x0416 +0x77 0x0412 +0x78 0x042c +0x79 0x042b +0x7a 0x0417 +0x7b 0x0428 +0x7c 0x042d +0x7d 0x0429 +0x7e 0x0427 +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02inis.t b/tests/02inis.t new file mode 100644 index 0000000..da6e128 --- /dev/null +++ b/tests/02inis.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'INIS', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'INIS', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'INIS'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'INIS', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x24 0xfffd +0x24 0xfffd +0x24 0xfffd +0x24 0x0024 +0x25 0x0025 +0x27 0xfffd +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x41 0xfffd +0x41 0xfffd +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5d 0xfffd +0x5d 0x005d +0x61 0xfffd +0x61 0xfffd +0x61 0xfffd +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7c 0xfffd +0x7c 0x007c +0x7f 0xfffd +0x7f 0xfffd +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02iso-8859-1.t b/tests/02iso-8859-1.t new file mode 100644 index 0000000..1247398 --- /dev/null +++ b/tests/02iso-8859-1.t @@ -0,0 +1,398 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-1', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-1', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-1'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-1', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0A 0x000A +0x0B 0x000B +0x0C 0x000C +0x0D 0x000D +0x0E 0x000E +0x0F 0x000F +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1A 0x001A +0x1B 0x001B +0x1C 0x001C +0x1D 0x001D +0x1E 0x001E +0x1F 0x001F +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2A 0x002A +0x2B 0x002B +0x2C 0x002C +0x2D 0x002D +0x2E 0x002E +0x2F 0x002F +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3A 0x003A +0x3B 0x003B +0x3C 0x003C +0x3D 0x003D +0x3E 0x003E +0x3F 0x003F +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4A 0x004A +0x4B 0x004B +0x4C 0x004C +0x4D 0x004D +0x4E 0x004E +0x4F 0x004F +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5A 0x005A +0x5B 0x005B +0x5C 0x005C +0x5D 0x005D +0x5E 0x005E +0x5F 0x005F +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6A 0x006A +0x6B 0x006B +0x6C 0x006C +0x6D 0x006D +0x6E 0x006E +0x6F 0x006F +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7A 0x007A +0x7B 0x007B +0x7C 0x007C +0x7D 0x007D +0x7E 0x007E +0x7F 0x007F +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8A 0x008A +0x8B 0x008B +0x8C 0x008C +0x8D 0x008D +0x8E 0x008E +0x8F 0x008F +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9A 0x009A +0x9B 0x009B +0x9C 0x009C +0x9D 0x009D +0x9E 0x009E +0x9F 0x009F +0xA0 0x00A0 +0xA1 0x00A1 +0xA2 0x00A2 +0xA3 0x00A3 +0xA4 0x00A4 +0xA5 0x00A5 +0xA6 0x00A6 +0xA7 0x00A7 +0xA8 0x00A8 +0xA9 0x00A9 +0xAA 0x00AA +0xAB 0x00AB +0xAC 0x00AC +0xAD 0x00AD +0xAE 0x00AE +0xAF 0x00AF +0xB0 0x00B0 +0xB1 0x00B1 +0xB2 0x00B2 +0xB3 0x00B3 +0xB4 0x00B4 +0xB5 0x00B5 +0xB6 0x00B6 +0xB7 0x00B7 +0xB8 0x00B8 +0xB9 0x00B9 +0xBA 0x00BA +0xBB 0x00BB +0xBC 0x00BC +0xBD 0x00BD +0xBE 0x00BE +0xBF 0x00BF +0xC0 0x00C0 +0xC1 0x00C1 +0xC2 0x00C2 +0xC3 0x00C3 +0xC4 0x00C4 +0xC5 0x00C5 +0xC6 0x00C6 +0xC7 0x00C7 +0xC8 0x00C8 +0xC9 0x00C9 +0xCA 0x00CA +0xCB 0x00CB +0xCC 0x00CC +0xCD 0x00CD +0xCE 0x00CE +0xCF 0x00CF +0xD0 0x00D0 +0xD1 0x00D1 +0xD2 0x00D2 +0xD3 0x00D3 +0xD4 0x00D4 +0xD5 0x00D5 +0xD6 0x00D6 +0xD7 0x00D7 +0xD8 0x00D8 +0xD9 0x00D9 +0xDA 0x00DA +0xDB 0x00DB +0xDC 0x00DC +0xDD 0x00DD +0xDE 0x00DE +0xDF 0x00DF +0xE0 0x00E0 +0xE1 0x00E1 +0xE2 0x00E2 +0xE3 0x00E3 +0xE4 0x00E4 +0xE5 0x00E5 +0xE6 0x00E6 +0xE7 0x00E7 +0xE8 0x00E8 +0xE9 0x00E9 +0xEA 0x00EA +0xEB 0x00EB +0xEC 0x00EC +0xED 0x00ED +0xEE 0x00EE +0xEF 0x00EF +0xF0 0x00F0 +0xF1 0x00F1 +0xF2 0x00F2 +0xF3 0x00F3 +0xF4 0x00F4 +0xF5 0x00F5 +0xF6 0x00F6 +0xF7 0x00F7 +0xF8 0x00F8 +0xF9 0x00F9 +0xFA 0x00FA +0xFB 0x00FB +0xFC 0x00FC +0xFD 0x00FD +0xFE 0x00FE +0xFF 0x00FF diff --git a/tests/02iso-8859-10.t b/tests/02iso-8859-10.t new file mode 100644 index 0000000..edbae89 --- /dev/null +++ b/tests/02iso-8859-10.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-10', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-10', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-10'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-10', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x0104 +0xa2 0x0112 +0xa3 0x0122 +0xa4 0x012a +0xa5 0x0128 +0xa6 0x0136 +0xa7 0x00a7 +0xa8 0x013b +0xa9 0x0110 +0xaa 0x0160 +0xab 0x0166 +0xac 0x017d +0xad 0x00ad +0xae 0x016a +0xaf 0x014a +0xb0 0x00b0 +0xb1 0x0105 +0xb2 0x0113 +0xb3 0x0123 +0xb4 0x012b +0xb5 0x0129 +0xb6 0x0137 +0xb7 0x00b7 +0xb8 0x013c +0xb9 0x0111 +0xba 0x0161 +0xbb 0x0167 +0xbc 0x017e +0xbd 0x2015 +0xbe 0x016b +0xbf 0x014b +0xc0 0x0100 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x012e +0xc8 0x010c +0xc9 0x00c9 +0xca 0x0118 +0xcb 0x00cb +0xcc 0x0116 +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd0 0x00d0 +0xd1 0x0145 +0xd2 0x014c +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x0168 +0xd8 0x00d8 +0xd9 0x0172 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x00dd +0xde 0x00de +0xdf 0x00df +0xe0 0x0101 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x012f +0xe8 0x010d +0xe9 0x00e9 +0xea 0x0119 +0xeb 0x00eb +0xec 0x0117 +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x00f0 +0xf1 0x0146 +0xf2 0x014d +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x0169 +0xf8 0x00f8 +0xf9 0x0173 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x00fe +0xff 0x0138 diff --git a/tests/02iso-8859-11.t b/tests/02iso-8859-11.t new file mode 100644 index 0000000..b31537b --- /dev/null +++ b/tests/02iso-8859-11.t @@ -0,0 +1,376 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + eval { + require Encode; + + if ($Encode::VERSION =~ /^1\./ && $Encode::VERSION < "1.78") { + print "1..0 # Skip: Encode $Encode::VERSION has a " . + "bug, please upgrade!\n"; + exit 0; + } + }; + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-11', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-11', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-11'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-11', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0xa0 0x00a0 +0xa1 0x0e01 +0xa2 0x0e02 +0xa3 0x0e03 +0xa4 0x0e04 +0xa5 0x0e05 +0xa6 0x0e06 +0xa7 0x0e07 +0xa8 0x0e08 +0xa9 0x0e09 +0xaa 0x0e0a +0xab 0x0e0b +0xac 0x0e0c +0xad 0x0e0d +0xae 0x0e0e +0xaf 0x0e0f +0xb0 0x0e10 +0xb1 0x0e11 +0xb2 0x0e12 +0xb3 0x0e13 +0xb4 0x0e14 +0xb5 0x0e15 +0xb6 0x0e16 +0xb7 0x0e17 +0xb8 0x0e18 +0xb9 0x0e19 +0xba 0x0e1a +0xbb 0x0e1b +0xbc 0x0e1c +0xbd 0x0e1d +0xbe 0x0e1e +0xbf 0x0e1f +0xc0 0x0e20 +0xc1 0x0e21 +0xc2 0x0e22 +0xc3 0x0e23 +0xc4 0x0e24 +0xc5 0x0e25 +0xc6 0x0e26 +0xc7 0x0e27 +0xc8 0x0e28 +0xc9 0x0e29 +0xca 0x0e2a +0xcb 0x0e2b +0xcc 0x0e2c +0xcd 0x0e2d +0xce 0x0e2e +0xcf 0x0e2f +0xd0 0x0e30 +0xd1 0x0e31 +0xd2 0x0e32 +0xd3 0x0e33 +0xd4 0x0e34 +0xd5 0x0e35 +0xd6 0x0e36 +0xd7 0x0e37 +0xd8 0x0e38 +0xd9 0x0e39 +0xda 0x0e3a +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0x0e3f +0xe0 0x0e40 +0xe1 0x0e41 +0xe2 0x0e42 +0xe3 0x0e43 +0xe4 0x0e44 +0xe5 0x0e45 +0xe6 0x0e46 +0xe7 0x0e47 +0xe8 0x0e48 +0xe9 0x0e49 +0xea 0x0e4a +0xeb 0x0e4b +0xec 0x0e4c +0xed 0x0e4d +0xee 0x0e4e +0xef 0x0e4f +0xf0 0x0e50 +0xf1 0x0e51 +0xf2 0x0e52 +0xf3 0x0e53 +0xf4 0x0e54 +0xf5 0x0e55 +0xf6 0x0e56 +0xf7 0x0e57 +0xf8 0x0e58 +0xf9 0x0e59 +0xfa 0x0e5a +0xfb 0x0e5b +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02iso-8859-13.t b/tests/02iso-8859-13.t new file mode 100644 index 0000000..307b749 --- /dev/null +++ b/tests/02iso-8859-13.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-13', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-13', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-13'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-13', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x201d +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x201e +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00d8 +0xa9 0x00a9 +0xaa 0x0156 +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00c6 +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x201c +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00f8 +0xb9 0x00b9 +0xba 0x0157 +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xbf 0x00e6 +0xc0 0x0104 +0xc1 0x012e +0xc2 0x0100 +0xc3 0x0106 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x0118 +0xc7 0x0112 +0xc8 0x010c +0xc9 0x00c9 +0xca 0x0179 +0xcb 0x0116 +0xcc 0x0122 +0xcd 0x0136 +0xce 0x012a +0xcf 0x013b +0xd0 0x0160 +0xd1 0x0143 +0xd2 0x0145 +0xd3 0x00d3 +0xd4 0x014c +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x0172 +0xd9 0x0141 +0xda 0x015a +0xdb 0x016a +0xdc 0x00dc +0xdd 0x017b +0xde 0x017d +0xdf 0x00df +0xe0 0x0105 +0xe1 0x012f +0xe2 0x0101 +0xe3 0x0107 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x0119 +0xe7 0x0113 +0xe8 0x010d +0xe9 0x00e9 +0xea 0x017a +0xeb 0x0117 +0xec 0x0123 +0xed 0x0137 +0xee 0x012b +0xef 0x013c +0xf0 0x0161 +0xf1 0x0144 +0xf2 0x0146 +0xf3 0x00f3 +0xf4 0x014d +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x0173 +0xf9 0x0142 +0xfa 0x015b +0xfb 0x016b +0xfc 0x00fc +0xfd 0x017c +0xfe 0x017e +0xff 0x2019 diff --git a/tests/02iso-8859-14.t b/tests/02iso-8859-14.t new file mode 100644 index 0000000..d60c78e --- /dev/null +++ b/tests/02iso-8859-14.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-14', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-14', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-14'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-14', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x1e02 +0xa2 0x1e03 +0xa3 0x00a3 +0xa4 0x010a +0xa5 0x010b +0xa6 0x1e0a +0xa7 0x00a7 +0xa8 0x1e80 +0xa9 0x00a9 +0xaa 0x1e82 +0xab 0x1e0b +0xac 0x1ef2 +0xad 0x00ad +0xae 0x00ae +0xaf 0x0178 +0xb0 0x1e1e +0xb1 0x1e1f +0xb2 0x0120 +0xb3 0x0121 +0xb4 0x1e40 +0xb5 0x1e41 +0xb6 0x00b6 +0xb7 0x1e56 +0xb8 0x1e81 +0xb9 0x1e57 +0xba 0x1e83 +0xbb 0x1e60 +0xbc 0x1ef3 +0xbd 0x1e84 +0xbe 0x1e85 +0xbf 0x1e61 +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd0 0x0174 +0xd1 0x00d1 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x1e6a +0xd8 0x00d8 +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x00dd +0xde 0x0176 +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x0175 +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x1e6b +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x0177 +0xff 0x00ff diff --git a/tests/02iso-8859-15.t b/tests/02iso-8859-15.t new file mode 100644 index 0000000..3ed073e --- /dev/null +++ b/tests/02iso-8859-15.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-15', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-15', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-15'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-15', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x00a1 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x20ac +0xa5 0x00a5 +0xa6 0x0160 +0xa7 0x00a7 +0xa8 0x0161 +0xa9 0x00a9 +0xaa 0x00aa +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x017d +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x017e +0xb9 0x00b9 +0xba 0x00ba +0xbb 0x00bb +0xbc 0x0152 +0xbd 0x0153 +0xbe 0x0178 +0xbf 0x00bf +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd0 0x00d0 +0xd1 0x00d1 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x00d8 +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x00dd +0xde 0x00de +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x00f0 +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x00fe +0xff 0x00ff diff --git a/tests/02iso-8859-16.t b/tests/02iso-8859-16.t new file mode 100644 index 0000000..8fcb168 --- /dev/null +++ b/tests/02iso-8859-16.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-16', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-16', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-16'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-16', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x0104 +0xa2 0x0105 +0xa3 0x0141 +0xa4 0x20ac +0xa5 0x201e +0xa6 0x0160 +0xa7 0x00a7 +0xa8 0x0161 +0xa9 0x00a9 +0xaa 0x0218 +0xab 0x00ab +0xac 0x0179 +0xad 0x00ad +0xae 0x017a +0xaf 0x017b +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x010c +0xb3 0x0142 +0xb4 0x017d +0xb5 0x201d +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x017e +0xb9 0x010d +0xba 0x0219 +0xbb 0x00bb +0xbc 0x0152 +0xbd 0x0153 +0xbe 0x0178 +0xbf 0x017c +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x0102 +0xc4 0x00c4 +0xc5 0x0106 +0xc6 0x00c6 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd0 0x0110 +0xd1 0x0143 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x0150 +0xd6 0x00d6 +0xd7 0x015a +0xd8 0x0170 +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x0118 +0xde 0x021a +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x0103 +0xe4 0x00e4 +0xe5 0x0107 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x0111 +0xf1 0x0144 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x0151 +0xf6 0x00f6 +0xf7 0x015b +0xf8 0x0171 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x0119 +0xfe 0x021b +0xff 0x00ff diff --git a/tests/02iso-8859-2.t b/tests/02iso-8859-2.t new file mode 100644 index 0000000..61a6ea8 --- /dev/null +++ b/tests/02iso-8859-2.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-2', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-2', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-2'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-2', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x0104 +0xa2 0x02d8 +0xa3 0x0141 +0xa4 0x00a4 +0xa5 0x013d +0xa6 0x015a +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x0160 +0xaa 0x015e +0xab 0x0164 +0xac 0x0179 +0xad 0x00ad +0xae 0x017d +0xaf 0x017b +0xb0 0x00b0 +0xb1 0x0105 +0xb2 0x02db +0xb3 0x0142 +0xb4 0x00b4 +0xb5 0x013e +0xb6 0x015b +0xb7 0x02c7 +0xb8 0x00b8 +0xb9 0x0161 +0xba 0x015f +0xbb 0x0165 +0xbc 0x017a +0xbd 0x02dd +0xbe 0x017e +0xbf 0x017c +0xc0 0x0154 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x0102 +0xc4 0x00c4 +0xc5 0x0139 +0xc6 0x0106 +0xc7 0x00c7 +0xc8 0x010c +0xc9 0x00c9 +0xca 0x0118 +0xcb 0x00cb +0xcc 0x011a +0xcd 0x00cd +0xce 0x00ce +0xcf 0x010e +0xd0 0x0110 +0xd1 0x0143 +0xd2 0x0147 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x0150 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x0158 +0xd9 0x016e +0xda 0x00da +0xdb 0x0170 +0xdc 0x00dc +0xdd 0x00dd +0xde 0x0162 +0xdf 0x00df +0xe0 0x0155 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x0103 +0xe4 0x00e4 +0xe5 0x013a +0xe6 0x0107 +0xe7 0x00e7 +0xe8 0x010d +0xe9 0x00e9 +0xea 0x0119 +0xeb 0x00eb +0xec 0x011b +0xed 0x00ed +0xee 0x00ee +0xef 0x010f +0xf0 0x0111 +0xf1 0x0144 +0xf2 0x0148 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x0151 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x0159 +0xf9 0x016f +0xfa 0x00fa +0xfb 0x0171 +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x0163 +0xff 0x02d9 diff --git a/tests/02iso-8859-3.t b/tests/02iso-8859-3.t new file mode 100644 index 0000000..4df8df2 --- /dev/null +++ b/tests/02iso-8859-3.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-3', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-3', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-3'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-3', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x0126 +0xa2 0x02d8 +0xa3 0x00a3 +0xa4 0x00a4 +0xa6 0xfffd +0xa6 0x0124 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x0130 +0xaa 0x015e +0xab 0x011e +0xac 0x0134 +0xad 0x00ad +0xaf 0xfffd +0xaf 0x017b +0xb0 0x00b0 +0xb1 0x0127 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x0125 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x0131 +0xba 0x015f +0xbb 0x011f +0xbc 0x0135 +0xbd 0x00bd +0xbf 0xfffd +0xbf 0x017c +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc4 0xfffd +0xc4 0x00c4 +0xc5 0x010a +0xc6 0x0108 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd1 0xfffd +0xd1 0x00d1 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x0120 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x011c +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x016c +0xde 0x015c +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe4 0xfffd +0xe4 0x00e4 +0xe5 0x010b +0xe6 0x0109 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf1 0xfffd +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x0121 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x011d +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x016d +0xfe 0x015d +0xff 0x02d9 diff --git a/tests/02iso-8859-4.t b/tests/02iso-8859-4.t new file mode 100644 index 0000000..7eefc6a --- /dev/null +++ b/tests/02iso-8859-4.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-4', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-4', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-4'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-4', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x0104 +0xa2 0x0138 +0xa3 0x0156 +0xa4 0x00a4 +0xa5 0x0128 +0xa6 0x013b +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x0160 +0xaa 0x0112 +0xab 0x0122 +0xac 0x0166 +0xad 0x00ad +0xae 0x017d +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x0105 +0xb2 0x02db +0xb3 0x0157 +0xb4 0x00b4 +0xb5 0x0129 +0xb6 0x013c +0xb7 0x02c7 +0xb8 0x00b8 +0xb9 0x0161 +0xba 0x0113 +0xbb 0x0123 +0xbc 0x0167 +0xbd 0x014a +0xbe 0x017e +0xbf 0x014b +0xc0 0x0100 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x012e +0xc8 0x010c +0xc9 0x00c9 +0xca 0x0118 +0xcb 0x00cb +0xcc 0x0116 +0xcd 0x00cd +0xce 0x00ce +0xcf 0x012a +0xd0 0x0110 +0xd1 0x0145 +0xd2 0x014c +0xd3 0x0136 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x00d8 +0xd9 0x0172 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x0168 +0xde 0x016a +0xdf 0x00df +0xe0 0x0101 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x012f +0xe8 0x010d +0xe9 0x00e9 +0xea 0x0119 +0xeb 0x00eb +0xec 0x0117 +0xed 0x00ed +0xee 0x00ee +0xef 0x012b +0xf0 0x0111 +0xf1 0x0146 +0xf2 0x014d +0xf3 0x0137 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x00f8 +0xf9 0x0173 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x0169 +0xfe 0x016b +0xff 0x02d9 diff --git a/tests/02iso-8859-5.t b/tests/02iso-8859-5.t new file mode 100644 index 0000000..2d6a1dc --- /dev/null +++ b/tests/02iso-8859-5.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-5', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-5', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-5'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-5', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x0401 +0xa2 0x0402 +0xa3 0x0403 +0xa4 0x0404 +0xa5 0x0405 +0xa6 0x0406 +0xa7 0x0407 +0xa8 0x0408 +0xa9 0x0409 +0xaa 0x040a +0xab 0x040b +0xac 0x040c +0xad 0x00ad +0xae 0x040e +0xaf 0x040f +0xb0 0x0410 +0xb1 0x0411 +0xb2 0x0412 +0xb3 0x0413 +0xb4 0x0414 +0xb5 0x0415 +0xb6 0x0416 +0xb7 0x0417 +0xb8 0x0418 +0xb9 0x0419 +0xba 0x041a +0xbb 0x041b +0xbc 0x041c +0xbd 0x041d +0xbe 0x041e +0xbf 0x041f +0xc0 0x0420 +0xc1 0x0421 +0xc2 0x0422 +0xc3 0x0423 +0xc4 0x0424 +0xc5 0x0425 +0xc6 0x0426 +0xc7 0x0427 +0xc8 0x0428 +0xc9 0x0429 +0xca 0x042a +0xcb 0x042b +0xcc 0x042c +0xcd 0x042d +0xce 0x042e +0xcf 0x042f +0xd0 0x0430 +0xd1 0x0431 +0xd2 0x0432 +0xd3 0x0433 +0xd4 0x0434 +0xd5 0x0435 +0xd6 0x0436 +0xd7 0x0437 +0xd8 0x0438 +0xd9 0x0439 +0xda 0x043a +0xdb 0x043b +0xdc 0x043c +0xdd 0x043d +0xde 0x043e +0xdf 0x043f +0xe0 0x0440 +0xe1 0x0441 +0xe2 0x0442 +0xe3 0x0443 +0xe4 0x0444 +0xe5 0x0445 +0xe6 0x0446 +0xe7 0x0447 +0xe8 0x0448 +0xe9 0x0449 +0xea 0x044a +0xeb 0x044b +0xec 0x044c +0xed 0x044d +0xee 0x044e +0xef 0x044f +0xf0 0x2116 +0xf1 0x0451 +0xf2 0x0452 +0xf3 0x0453 +0xf4 0x0454 +0xf5 0x0455 +0xf6 0x0456 +0xf7 0x0457 +0xf8 0x0458 +0xf9 0x0459 +0xfa 0x045a +0xfb 0x045b +0xfc 0x045c +0xfd 0x00a7 +0xfe 0x045e +0xff 0x045f diff --git a/tests/02iso-8859-6.t b/tests/02iso-8859-6.t new file mode 100644 index 0000000..d025678 --- /dev/null +++ b/tests/02iso-8859-6.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-6', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-6', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-6'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-6', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa4 0xfffd +0xa4 0xfffd +0xa4 0xfffd +0xa4 0x00a4 +0xac 0xfffd +0xac 0xfffd +0xac 0xfffd +0xac 0xfffd +0xac 0xfffd +0xac 0xfffd +0xac 0xfffd +0xac 0x060c +0xad 0x00ad +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0xfffd +0xbb 0x061b +0xbf 0xfffd +0xbf 0xfffd +0xbf 0xfffd +0xbf 0x061f +0xc1 0xfffd +0xc1 0x0621 +0xc2 0x0622 +0xc3 0x0623 +0xc4 0x0624 +0xc5 0x0625 +0xc6 0x0626 +0xc7 0x0627 +0xc8 0x0628 +0xc9 0x0629 +0xca 0x062a +0xcb 0x062b +0xcc 0x062c +0xcd 0x062d +0xce 0x062e +0xcf 0x062f +0xd0 0x0630 +0xd1 0x0631 +0xd2 0x0632 +0xd3 0x0633 +0xd4 0x0634 +0xd5 0x0635 +0xd6 0x0636 +0xd7 0x0637 +0xd8 0x0638 +0xd9 0x0639 +0xda 0x063a +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x0640 +0xe1 0x0641 +0xe2 0x0642 +0xe3 0x0643 +0xe4 0x0644 +0xe5 0x0645 +0xe6 0x0646 +0xe7 0x0647 +0xe8 0x0648 +0xe9 0x0649 +0xea 0x064a +0xeb 0x064b +0xec 0x064c +0xed 0x064d +0xee 0x064e +0xef 0x064f +0xf0 0x0650 +0xf1 0x0651 +0xf2 0x0652 +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02iso-8859-7.t b/tests/02iso-8859-7.t new file mode 100644 index 0000000..b18460c --- /dev/null +++ b/tests/02iso-8859-7.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-7', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-7', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-7'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-7', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x2018 +0xa2 0x2019 +0xa3 0x00a3 +0xa6 0xfffd +0xa6 0xfffd +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xab 0xfffd +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xaf 0xfffd +0xaf 0x2015 +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x0384 +0xb5 0x0385 +0xb6 0x0386 +0xb7 0x00b7 +0xb8 0x0388 +0xb9 0x0389 +0xba 0x038a +0xbb 0x00bb +0xbc 0x038c +0xbd 0x00bd +0xbe 0x038e +0xbf 0x038f +0xc0 0x0390 +0xc1 0x0391 +0xc2 0x0392 +0xc3 0x0393 +0xc4 0x0394 +0xc5 0x0395 +0xc6 0x0396 +0xc7 0x0397 +0xc8 0x0398 +0xc9 0x0399 +0xca 0x039a +0xcb 0x039b +0xcc 0x039c +0xcd 0x039d +0xce 0x039e +0xcf 0x039f +0xd0 0x03a0 +0xd1 0x03a1 +0xd3 0xfffd +0xd3 0x03a3 +0xd4 0x03a4 +0xd5 0x03a5 +0xd6 0x03a6 +0xd7 0x03a7 +0xd8 0x03a8 +0xd9 0x03a9 +0xda 0x03aa +0xdb 0x03ab +0xdc 0x03ac +0xdd 0x03ad +0xde 0x03ae +0xdf 0x03af +0xe0 0x03b0 +0xe1 0x03b1 +0xe2 0x03b2 +0xe3 0x03b3 +0xe4 0x03b4 +0xe5 0x03b5 +0xe6 0x03b6 +0xe7 0x03b7 +0xe8 0x03b8 +0xe9 0x03b9 +0xea 0x03ba +0xeb 0x03bb +0xec 0x03bc +0xed 0x03bd +0xee 0x03be +0xef 0x03bf +0xf0 0x03c0 +0xf1 0x03c1 +0xf2 0x03c2 +0xf3 0x03c3 +0xf4 0x03c4 +0xf5 0x03c5 +0xf6 0x03c6 +0xf7 0x03c7 +0xf8 0x03c8 +0xf9 0x03c9 +0xfa 0x03ca +0xfb 0x03cb +0xfc 0x03cc +0xfd 0x03cd +0xfe 0x03ce +0xff 0xfffd diff --git a/tests/02iso-8859-8.t b/tests/02iso-8859-8.t new file mode 100644 index 0000000..f72f25a --- /dev/null +++ b/tests/02iso-8859-8.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-8', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-8', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-8'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-8', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa2 0xfffd +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x00a5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x00d7 +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x00b9 +0xba 0x00f7 +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0xfffd +0xdf 0x2017 +0xe0 0x05d0 +0xe1 0x05d1 +0xe2 0x05d2 +0xe3 0x05d3 +0xe4 0x05d4 +0xe5 0x05d5 +0xe6 0x05d6 +0xe7 0x05d7 +0xe8 0x05d8 +0xe9 0x05d9 +0xea 0x05da +0xeb 0x05db +0xec 0x05dc +0xed 0x05dd +0xee 0x05de +0xef 0x05df +0xf0 0x05e0 +0xf1 0x05e1 +0xf2 0x05e2 +0xf3 0x05e3 +0xf4 0x05e4 +0xf5 0x05e5 +0xf6 0x05e6 +0xf7 0x05e7 +0xf8 0x05e8 +0xf9 0x05e9 +0xfa 0x05ea +0xfd 0xfffd +0xfd 0xfffd +0xfd 0x200e +0xfe 0x200f +0xff 0xfffd diff --git a/tests/02iso-8859-9.t b/tests/02iso-8859-9.t new file mode 100644 index 0000000..d1b2a15 --- /dev/null +++ b/tests/02iso-8859-9.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO-8859-9', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO-8859-9', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-9'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-9', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xa0 0x00a0 +0xa1 0x00a1 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x00a5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x00aa +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x00af +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x00b3 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x00b8 +0xb9 0x00b9 +0xba 0x00ba +0xbb 0x00bb +0xbc 0x00bc +0xbd 0x00bd +0xbe 0x00be +0xbf 0x00bf +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd0 0x011e +0xd1 0x00d1 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x00d8 +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x0130 +0xde 0x015e +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x011f +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x0131 +0xfe 0x015f +0xff 0x00ff diff --git a/tests/02iso_10367-box.t b/tests/02iso_10367-box.t new file mode 100644 index 0000000..01cc5f3 --- /dev/null +++ b/tests/02iso_10367-box.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO_10367-BOX', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO_10367-BOX', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_10367-BOX'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_10367-BOX', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0080 +0x81 0x0081 +0x82 0x0082 +0x83 0x0083 +0x84 0x0084 +0x85 0x0085 +0x86 0x0086 +0x87 0x0087 +0x88 0x0088 +0x89 0x0089 +0x8a 0x008a +0x8b 0x008b +0x8c 0x008c +0x8d 0x008d +0x8e 0x008e +0x8f 0x008f +0x90 0x0090 +0x91 0x0091 +0x92 0x0092 +0x93 0x0093 +0x94 0x0094 +0x95 0x0095 +0x96 0x0096 +0x97 0x0097 +0x98 0x0098 +0x99 0x0099 +0x9a 0x009a +0x9b 0x009b +0x9c 0x009c +0x9d 0x009d +0x9e 0x009e +0x9f 0x009f +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x2551 +0xc1 0x2550 +0xc2 0x2554 +0xc3 0x2557 +0xc4 0x255a +0xc5 0x255d +0xc6 0x2560 +0xc7 0x2563 +0xc8 0x2566 +0xc9 0x2569 +0xca 0x256c +0xcb 0xe019 +0xcc 0x2584 +0xcd 0x2588 +0xce 0x25aa +0xd0 0xfffd +0xd0 0x2502 +0xd1 0x2500 +0xd2 0x250c +0xd3 0x2510 +0xd4 0x2514 +0xd5 0x2518 +0xd6 0x251c +0xd7 0x2524 +0xd8 0x252c +0xd9 0x2534 +0xda 0x253c +0xdb 0x2591 +0xdc 0x2592 +0xdd 0x2593 +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02iso_2033-1983.t b/tests/02iso_2033-1983.t new file mode 100644 index 0000000..1915636 --- /dev/null +++ b/tests/02iso_2033-1983.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO_2033-1983', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO_2033-1983', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_2033-1983'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_2033-1983', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x2446 +0x3b 0x2447 +0x3c 0x2448 +0x3d 0x2449 +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02iso_5427-ext.t b/tests/02iso_5427-ext.t new file mode 100644 index 0000000..a275cdd --- /dev/null +++ b/tests/02iso_5427-ext.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO_5427-EXT', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO_5427-EXT', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_5427-EXT'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_5427-EXT', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0xfffd +0x40 0x0491 +0x41 0x0452 +0x42 0x0453 +0x43 0x0454 +0x44 0x0451 +0x45 0x0455 +0x46 0x0456 +0x47 0x0457 +0x48 0x0458 +0x49 0x0459 +0x4a 0x045a +0x4b 0x045b +0x4c 0x045c +0x4d 0x045e +0x4e 0x045f +0x50 0xfffd +0x50 0x0463 +0x51 0x0473 +0x52 0x0475 +0x53 0x046b +0x5b 0xfffd +0x5b 0xfffd +0x5b 0xfffd +0x5b 0xfffd +0x5b 0xfffd +0x5b 0xfffd +0x5b 0xfffd +0x5b 0x005b +0x5d 0xfffd +0x5d 0x005d +0x5f 0xfffd +0x5f 0x005f +0x60 0x0490 +0x61 0x0402 +0x62 0x0403 +0x63 0x0404 +0x64 0x0401 +0x65 0x0405 +0x66 0x0406 +0x67 0x0407 +0x68 0x0408 +0x69 0x0409 +0x6a 0x040a +0x6b 0x040b +0x6c 0x040c +0x6d 0x040e +0x6e 0x040f +0x6f 0x042a +0x70 0x0462 +0x71 0x0472 +0x72 0x0474 +0x73 0x046a +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0xfffd +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02iso_5427.t b/tests/02iso_5427.t new file mode 100644 index 0000000..109dc5b --- /dev/null +++ b/tests/02iso_5427.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO_5427', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO_5427', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_5427'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_5427', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x00a4 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x044e +0x41 0x0430 +0x42 0x0431 +0x43 0x0446 +0x44 0x0434 +0x45 0x0435 +0x46 0x0444 +0x47 0x0433 +0x48 0x0445 +0x49 0x0438 +0x4a 0x0439 +0x4b 0x043a +0x4c 0x043b +0x4d 0x043c +0x4e 0x043d +0x4f 0x043e +0x50 0x043f +0x51 0x044f +0x52 0x0440 +0x53 0x0441 +0x54 0x0442 +0x55 0x0443 +0x56 0x0436 +0x57 0x0432 +0x58 0x044c +0x59 0x044b +0x5a 0x0437 +0x5b 0x0448 +0x5c 0x044d +0x5d 0x0449 +0x5e 0x0447 +0x5f 0x044a +0x60 0x042e +0x61 0x0410 +0x62 0x0411 +0x63 0x0426 +0x64 0x0414 +0x65 0x0415 +0x66 0x0424 +0x67 0x0413 +0x68 0x0425 +0x69 0x0418 +0x6a 0x0419 +0x6b 0x041a +0x6c 0x041b +0x6d 0x041c +0x6e 0x041d +0x6f 0x041e +0x70 0x041f +0x71 0x042f +0x72 0x0420 +0x73 0x0421 +0x74 0x0422 +0x75 0x0423 +0x76 0x0416 +0x77 0x0412 +0x78 0x042c +0x79 0x042b +0x7a 0x0417 +0x7b 0x0428 +0x7c 0x042d +0x7d 0x0429 +0x7e 0x0427 +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02iso_5428.t b/tests/02iso_5428.t new file mode 100644 index 0000000..0245813 --- /dev/null +++ b/tests/02iso_5428.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'ISO_5428', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ISO_5428', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_5428'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO_5428', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0xe002 +0x22 0xe003 +0x23 0xe009 +0x24 0xe005 +0x25 0xe012 +0x26 0xe013 +0x27 0xe014 +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0xfffd +0x30 0x00ab +0x31 0x00bb +0x32 0x201d +0x33 0x201c +0x34 0x0374 +0x35 0x0375 +0x3b 0xfffd +0x3b 0xfffd +0x3b 0xfffd +0x3b 0xfffd +0x3b 0xfffd +0x3b 0x00b7 +0x3f 0xfffd +0x3f 0xfffd +0x3f 0xfffd +0x3f 0x003b +0x41 0xfffd +0x41 0x0391 +0x42 0x0392 +0x44 0xfffd +0x44 0x0393 +0x45 0x0394 +0x46 0x0395 +0x47 0x03da +0x48 0x03dc +0x49 0x0396 +0x4a 0x0397 +0x4b 0x0398 +0x4c 0x0399 +0x4d 0x039a +0x4e 0x039b +0x4f 0x039c +0x50 0x039d +0x51 0x039e +0x52 0x039f +0x53 0x03a0 +0x54 0x03de +0x55 0x03a1 +0x56 0x03a3 +0x58 0xfffd +0x58 0x03a4 +0x59 0x03a5 +0x5a 0x03a6 +0x5b 0x03a7 +0x5c 0x03a8 +0x5d 0x03a9 +0x5e 0x03e0 +0x61 0xfffd +0x61 0xfffd +0x61 0x03b1 +0x62 0x03b2 +0x63 0x03d0 +0x64 0x03b3 +0x65 0x03b4 +0x66 0x03b5 +0x67 0xe01a +0x68 0xe01b +0x69 0x03b6 +0x6a 0x03b7 +0x6b 0x03b8 +0x6c 0x03b9 +0x6d 0x03ba +0x6e 0x03bb +0x6f 0x03bc +0x70 0x03bd +0x71 0x03be +0x72 0x03bf +0x73 0x03c0 +0x74 0xe01c +0x75 0x03c1 +0x76 0x03c3 +0x77 0x03c2 +0x78 0x03c4 +0x79 0x03c5 +0x7a 0x03c6 +0x7b 0x03c7 +0x7c 0x03c8 +0x7d 0x03c9 +0x7e 0xe01d +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02koi-8.t b/tests/02koi-8.t new file mode 100644 index 0000000..75bd89a --- /dev/null +++ b/tests/02koi-8.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'KOI-8', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'KOI-8', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI-8'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI-8', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0xfffd +0xc0 0x044e +0xc1 0x0430 +0xc2 0x0431 +0xc3 0x0446 +0xc4 0x0434 +0xc5 0x0435 +0xc6 0x0444 +0xc7 0x0433 +0xc8 0x0445 +0xc9 0x0438 +0xca 0x0439 +0xcb 0x043a +0xcc 0x043b +0xcd 0x043c +0xce 0x043d +0xcf 0x043e +0xd0 0x043f +0xd1 0x044f +0xd2 0x0440 +0xd3 0x0441 +0xd4 0x0442 +0xd5 0x0443 +0xd6 0x0436 +0xd7 0x0432 +0xd8 0x044c +0xd9 0x044b +0xda 0x0437 +0xdb 0x0448 +0xdc 0x044d +0xdd 0x0449 +0xde 0x0447 +0xdf 0x044a +0xe0 0x042e +0xe1 0x0410 +0xe2 0x0411 +0xe3 0x0426 +0xe4 0x0414 +0xe5 0x0415 +0xe6 0x0424 +0xe7 0x0413 +0xe8 0x0425 +0xe9 0x0418 +0xea 0x0419 +0xeb 0x041a +0xec 0x041b +0xed 0x041c +0xee 0x041d +0xef 0x041e +0xf0 0x041f +0xf1 0x042f +0xf2 0x0420 +0xf3 0x0421 +0xf4 0x0422 +0xf5 0x0423 +0xf6 0x0416 +0xf7 0x0412 +0xf8 0x042c +0xf9 0x042b +0xfa 0x0417 +0xfb 0x0428 +0xfc 0x042d +0xfd 0x0429 +0xfe 0x0427 +0xff 0xfffd diff --git a/tests/02koi8-r.t b/tests/02koi8-r.t new file mode 100644 index 0000000..622f77b --- /dev/null +++ b/tests/02koi8-r.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'KOI8-R', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'KOI8-R', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI8-R'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI8-R', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x2500 +0x81 0x2502 +0x82 0x250c +0x83 0x2510 +0x84 0x2514 +0x85 0x2518 +0x86 0x251c +0x87 0x2524 +0x88 0x252c +0x89 0x2534 +0x8a 0x253c +0x8b 0x2580 +0x8c 0x2584 +0x8d 0x2588 +0x8e 0x258c +0x8f 0x2590 +0x90 0x2591 +0x91 0x2592 +0x92 0x2593 +0x93 0x2320 +0x94 0x25a0 +0x95 0x2219 +0x96 0x221a +0x97 0x2248 +0x98 0x2264 +0x99 0x2265 +0x9a 0x00a0 +0x9b 0x2321 +0x9c 0x00b0 +0x9d 0x00b2 +0x9e 0x00b7 +0x9f 0x00f7 +0xa0 0x2550 +0xa1 0x2551 +0xa2 0x2552 +0xa3 0x0451 +0xa4 0x2553 +0xa5 0x2554 +0xa6 0x2555 +0xa7 0x2556 +0xa8 0x2557 +0xa9 0x2558 +0xaa 0x2559 +0xab 0x255a +0xac 0x255b +0xad 0x255c +0xae 0x255d +0xaf 0x255e +0xb0 0x255f +0xb1 0x2560 +0xb2 0x2561 +0xb3 0x0401 +0xb4 0x2562 +0xb5 0x2563 +0xb6 0x2564 +0xb7 0x2565 +0xb8 0x2566 +0xb9 0x2567 +0xba 0x2568 +0xbb 0x2569 +0xbc 0x256a +0xbd 0x256b +0xbe 0x256c +0xbf 0x00a9 +0xc0 0x044e +0xc1 0x0430 +0xc2 0x0431 +0xc3 0x0446 +0xc4 0x0434 +0xc5 0x0435 +0xc6 0x0444 +0xc7 0x0433 +0xc8 0x0445 +0xc9 0x0438 +0xca 0x0439 +0xcb 0x043a +0xcc 0x043b +0xcd 0x043c +0xce 0x043d +0xcf 0x043e +0xd0 0x043f +0xd1 0x044f +0xd2 0x0440 +0xd3 0x0441 +0xd4 0x0442 +0xd5 0x0443 +0xd6 0x0436 +0xd7 0x0432 +0xd8 0x044c +0xd9 0x044b +0xda 0x0437 +0xdb 0x0448 +0xdc 0x044d +0xdd 0x0449 +0xde 0x0447 +0xdf 0x044a +0xe0 0x042e +0xe1 0x0410 +0xe2 0x0411 +0xe3 0x0426 +0xe4 0x0414 +0xe5 0x0415 +0xe6 0x0424 +0xe7 0x0413 +0xe8 0x0425 +0xe9 0x0418 +0xea 0x0419 +0xeb 0x041a +0xec 0x041b +0xed 0x041c +0xee 0x041d +0xef 0x041e +0xf0 0x041f +0xf1 0x042f +0xf2 0x0420 +0xf3 0x0421 +0xf4 0x0422 +0xf5 0x0423 +0xf6 0x0416 +0xf7 0x0412 +0xf8 0x042c +0xf9 0x042b +0xfa 0x0417 +0xfb 0x0428 +0xfc 0x042d +0xfd 0x0429 +0xfe 0x0427 +0xff 0x042a diff --git a/tests/02koi8-ru.t b/tests/02koi8-ru.t new file mode 100644 index 0000000..2779009 --- /dev/null +++ b/tests/02koi8-ru.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'KOI8-RU', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'KOI8-RU', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI8-RU'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI8-RU', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x2500 +0x81 0x2502 +0x82 0x250c +0x83 0x2510 +0x84 0x2514 +0x85 0x2518 +0x86 0x251c +0x87 0x2524 +0x88 0x252c +0x89 0x2534 +0x8a 0x253c +0x8b 0x2580 +0x8c 0x2584 +0x8d 0x2588 +0x8e 0x258c +0x8f 0x2590 +0x90 0x2591 +0x91 0x2592 +0x92 0x2593 +0x93 0x2320 +0x94 0x25a0 +0x95 0x2219 +0x96 0x221a +0x97 0x2248 +0x98 0x2264 +0x99 0x2265 +0x9a 0x00a0 +0x9b 0x2321 +0x9c 0x00b0 +0x9d 0x00b2 +0x9e 0x00b7 +0x9f 0x00f7 +0xa0 0x2550 +0xa1 0x2551 +0xa2 0x2552 +0xa3 0x0451 +0xa4 0x0454 +0xa5 0x2554 +0xa6 0x0456 +0xa7 0x0457 +0xa8 0x2557 +0xa9 0x2558 +0xaa 0x2559 +0xab 0x255a +0xac 0x255b +0xad 0x0491 +0xae 0x045e +0xaf 0x255e +0xb0 0x255f +0xb1 0x2560 +0xb2 0x2561 +0xb3 0x0401 +0xb4 0x0404 +0xb5 0x2563 +0xb6 0x0406 +0xb7 0x0407 +0xb8 0x2566 +0xb9 0x2567 +0xba 0x2568 +0xbb 0x2569 +0xbc 0x256a +0xbd 0x0490 +0xbe 0x040e +0xbf 0x00a9 +0xc0 0x044e +0xc1 0x0430 +0xc2 0x0431 +0xc3 0x0446 +0xc4 0x0434 +0xc5 0x0435 +0xc6 0x0444 +0xc7 0x0433 +0xc8 0x0445 +0xc9 0x0438 +0xca 0x0439 +0xcb 0x043a +0xcc 0x043b +0xcd 0x043c +0xce 0x043d +0xcf 0x043e +0xd0 0x043f +0xd1 0x044f +0xd2 0x0440 +0xd3 0x0441 +0xd4 0x0442 +0xd5 0x0443 +0xd6 0x0436 +0xd7 0x0432 +0xd8 0x044c +0xd9 0x044b +0xda 0x0437 +0xdb 0x0448 +0xdc 0x044d +0xdd 0x0449 +0xde 0x0447 +0xdf 0x044a +0xe0 0x042e +0xe1 0x0410 +0xe2 0x0411 +0xe3 0x0426 +0xe4 0x0414 +0xe5 0x0415 +0xe6 0x0424 +0xe7 0x0413 +0xe8 0x0425 +0xe9 0x0418 +0xea 0x0419 +0xeb 0x041a +0xec 0x041b +0xed 0x041c +0xee 0x041d +0xef 0x041e +0xf0 0x041f +0xf1 0x042f +0xf2 0x0420 +0xf3 0x0421 +0xf4 0x0422 +0xf5 0x0423 +0xf6 0x0416 +0xf7 0x0412 +0xf8 0x042c +0xf9 0x042b +0xfa 0x0417 +0xfb 0x0428 +0xfc 0x042d +0xfd 0x0429 +0xfe 0x0427 +0xff 0x042a diff --git a/tests/02koi8-t.t b/tests/02koi8-t.t new file mode 100644 index 0000000..dab3a3d --- /dev/null +++ b/tests/02koi8-t.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'KOI8-T', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'KOI8-T', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI8-T'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI8-T', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x049b +0x81 0x0493 +0x82 0x201a +0x83 0x0492 +0x84 0x201e +0x85 0x2026 +0x86 0x2020 +0x87 0x2021 +0x89 0xfffd +0x89 0x2030 +0x8a 0x04b3 +0x8b 0x2039 +0x8c 0x04b2 +0x8d 0x04b7 +0x8e 0x04b6 +0x90 0xfffd +0x90 0x049a +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x99 0xfffd +0x99 0x2122 +0x9b 0xfffd +0x9b 0x203a +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0xfffd +0xa1 0x04ef +0xa2 0x04ee +0xa3 0x0451 +0xa4 0x00a4 +0xa5 0x04e3 +0xa6 0x00a6 +0xa7 0x00a7 +0xab 0xfffd +0xab 0xfffd +0xab 0xfffd +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xb0 0xfffd +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x00b2 +0xb3 0x0401 +0xb5 0xfffd +0xb5 0x04e2 +0xb6 0x00b6 +0xb7 0x00b7 +0xb9 0xfffd +0xb9 0x2116 +0xbb 0xfffd +0xbb 0x00bb +0xbf 0xfffd +0xbf 0xfffd +0xbf 0xfffd +0xbf 0x00a9 +0xc0 0x044e +0xc1 0x0430 +0xc2 0x0431 +0xc3 0x0446 +0xc4 0x0434 +0xc5 0x0435 +0xc6 0x0444 +0xc7 0x0433 +0xc8 0x0445 +0xc9 0x0438 +0xca 0x0439 +0xcb 0x043a +0xcc 0x043b +0xcd 0x043c +0xce 0x043d +0xcf 0x043e +0xd0 0x043f +0xd1 0x044f +0xd2 0x0440 +0xd3 0x0441 +0xd4 0x0442 +0xd5 0x0443 +0xd6 0x0436 +0xd7 0x0432 +0xd8 0x044c +0xd9 0x044b +0xda 0x0437 +0xdb 0x0448 +0xdc 0x044d +0xdd 0x0449 +0xde 0x0447 +0xdf 0x044a +0xe0 0x042e +0xe1 0x0410 +0xe2 0x0411 +0xe3 0x0426 +0xe4 0x0414 +0xe5 0x0415 +0xe6 0x0424 +0xe7 0x0413 +0xe8 0x0425 +0xe9 0x0418 +0xea 0x0419 +0xeb 0x041a +0xec 0x041b +0xed 0x041c +0xee 0x041d +0xef 0x041e +0xf0 0x041f +0xf1 0x042f +0xf2 0x0420 +0xf3 0x0421 +0xf4 0x0422 +0xf5 0x0423 +0xf6 0x0416 +0xf7 0x0412 +0xf8 0x042c +0xf9 0x042b +0xfa 0x0417 +0xfb 0x0428 +0xfc 0x042d +0xfd 0x0429 +0xfe 0x0427 +0xff 0x042a diff --git a/tests/02koi8-u.t b/tests/02koi8-u.t new file mode 100644 index 0000000..2772406 --- /dev/null +++ b/tests/02koi8-u.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'KOI8-U', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'KOI8-U', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI8-U'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'KOI8-U', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x2500 +0x81 0x2502 +0x82 0x250c +0x83 0x2510 +0x84 0x2514 +0x85 0x2518 +0x86 0x251c +0x87 0x2524 +0x88 0x252c +0x89 0x2534 +0x8a 0x253c +0x8b 0x2580 +0x8c 0x2584 +0x8d 0x2588 +0x8e 0x258c +0x8f 0x2590 +0x90 0x2591 +0x91 0x2592 +0x92 0x2593 +0x93 0x2320 +0x94 0x25a0 +0x95 0x2219 +0x96 0x221a +0x97 0x2248 +0x98 0x2264 +0x99 0x2265 +0x9a 0x00a0 +0x9b 0x2321 +0x9c 0x00b0 +0x9d 0x00b2 +0x9e 0x00b7 +0x9f 0x00f7 +0xa0 0x2550 +0xa1 0x2551 +0xa2 0x2552 +0xa3 0x0451 +0xa4 0x0454 +0xa5 0x2554 +0xa6 0x0456 +0xa7 0x0457 +0xa8 0x2557 +0xa9 0x2558 +0xaa 0x2559 +0xab 0x255a +0xac 0x255b +0xad 0x0491 +0xae 0x255d +0xaf 0x255e +0xb0 0x255f +0xb1 0x2560 +0xb2 0x2561 +0xb3 0x0401 +0xb4 0x0404 +0xb5 0x2563 +0xb6 0x0406 +0xb7 0x0407 +0xb8 0x2566 +0xb9 0x2567 +0xba 0x2568 +0xbb 0x2569 +0xbc 0x256a +0xbd 0x0490 +0xbe 0x256c +0xbf 0x00a9 +0xc0 0x044e +0xc1 0x0430 +0xc2 0x0431 +0xc3 0x0446 +0xc4 0x0434 +0xc5 0x0435 +0xc6 0x0444 +0xc7 0x0433 +0xc8 0x0445 +0xc9 0x0438 +0xca 0x0439 +0xcb 0x043a +0xcc 0x043b +0xcd 0x043c +0xce 0x043d +0xcf 0x043e +0xd0 0x043f +0xd1 0x044f +0xd2 0x0440 +0xd3 0x0441 +0xd4 0x0442 +0xd5 0x0443 +0xd6 0x0436 +0xd7 0x0432 +0xd8 0x044c +0xd9 0x044b +0xda 0x0437 +0xdb 0x0448 +0xdc 0x044d +0xdd 0x0449 +0xde 0x0447 +0xdf 0x044a +0xe0 0x042e +0xe1 0x0410 +0xe2 0x0411 +0xe3 0x0426 +0xe4 0x0414 +0xe5 0x0415 +0xe6 0x0424 +0xe7 0x0413 +0xe8 0x0425 +0xe9 0x0418 +0xea 0x0419 +0xeb 0x041a +0xec 0x041b +0xed 0x041c +0xee 0x041d +0xef 0x041e +0xf0 0x041f +0xf1 0x042f +0xf2 0x0420 +0xf3 0x0421 +0xf4 0x0422 +0xf5 0x0423 +0xf6 0x0416 +0xf7 0x0412 +0xf8 0x042c +0xf9 0x042b +0xfa 0x0417 +0xfb 0x0428 +0xfc 0x042d +0xfd 0x0429 +0xfe 0x0427 +0xff 0x042a diff --git a/tests/02latin-greek-1.t b/tests/02latin-greek-1.t new file mode 100644 index 0000000..8aa8f07 --- /dev/null +++ b/tests/02latin-greek-1.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'LATIN-GREEK-1', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'LATIN-GREEK-1', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'LATIN-GREEK-1'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'LATIN-GREEK-1', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x039e +0x22 0x0022 +0x23 0x0393 +0x24 0x00a4 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x03a8 +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x03a0 +0x40 0x0394 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x03a9 +0x5c 0x0398 +0x5d 0x03a6 +0x5e 0x039b +0x5f 0x03a3 +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x203e +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02latin-greek.t b/tests/02latin-greek.t new file mode 100644 index 0000000..df65a56 --- /dev/null +++ b/tests/02latin-greek.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'LATIN-GREEK', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'LATIN-GREEK', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'LATIN-GREEK'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'LATIN-GREEK', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x00a3 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0391 +0x62 0x0392 +0x63 0x03a8 +0x64 0x0394 +0x65 0x0395 +0x66 0x03a6 +0x67 0x0393 +0x68 0x0397 +0x69 0x0399 +0x6a 0x039e +0x6b 0x039a +0x6c 0x039b +0x6d 0x039c +0x6e 0x039d +0x6f 0x039f +0x70 0x03a0 +0x72 0xfffd +0x72 0x03a1 +0x73 0x03a3 +0x74 0x03a4 +0x75 0x0398 +0x76 0x03a9 +0x77 0x00b7 +0x78 0x03a7 +0x79 0x03a5 +0x7a 0x0396 +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x00a8 +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02mac-is.t b/tests/02mac-is.t new file mode 100644 index 0000000..519a898 --- /dev/null +++ b/tests/02mac-is.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MAC-IS', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MAC-IS', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MAC-IS'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MAC-IS', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0x00c5 +0x82 0x00c7 +0x83 0x00c9 +0x84 0x00d1 +0x85 0x00d6 +0x86 0x00dc +0x87 0x00e1 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x00e3 +0x8c 0x00e5 +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00ed +0x93 0x00ec +0x94 0x00ee +0x95 0x00ef +0x96 0x00f1 +0x97 0x00f3 +0x98 0x00f2 +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00f5 +0x9c 0x00fa +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa0 0x2020 +0xa1 0x00b0 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x00df +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x00b4 +0xac 0x00a8 +0xad 0x2260 +0xae 0x00c6 +0xaf 0x00d8 +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x00a5 +0xb5 0x00b5 +0xb6 0x2202 +0xb7 0x2211 +0xb8 0x220f +0xb9 0x03c0 +0xba 0x222b +0xbb 0x00aa +0xbc 0x00ba +0xbd 0x03a9 +0xbe 0x00e6 +0xbf 0x00f8 +0xc0 0x00bf +0xc1 0x00a1 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x0394 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x00c0 +0xcc 0x00c3 +0xcd 0x00d5 +0xce 0x0152 +0xcf 0x0153 +0xd0 0x2014 +0xd1 0x2013 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x25c6 +0xd8 0x00ff +0xd9 0x0178 +0xda 0x2044 +0xdb 0x00a4 +0xdc 0x0110 +0xdd 0x0111 +0xde 0x00de +0xdf 0x00fe +0xe0 0x2021 +0xe1 0x00b7 +0xe2 0x201a +0xe3 0x201e +0xe4 0x2030 +0xe5 0x00c2 +0xe6 0x00ca +0xe7 0x00c1 +0xe8 0x00cb +0xe9 0x00c8 +0xea 0x00cd +0xeb 0x00ce +0xec 0x00cf +0xed 0x00cc +0xee 0x00d3 +0xef 0x00d4 +0xf0 0xe01e +0xf1 0x00d2 +0xf2 0x00da +0xf3 0x00db +0xf4 0x00d9 +0xf5 0x0131 +0xf8 0xfffd +0xf8 0xfffd +0xf8 0x00af +0xf9 0x02d8 +0xfa 0x02d9 +0xfb 0x02da +0xfc 0x00b8 +0xfd 0x02dd +0xfe 0x02db +0xff 0x02c7 diff --git a/tests/02mac-sami.t b/tests/02mac-sami.t new file mode 100644 index 0000000..1682ccc --- /dev/null +++ b/tests/02mac-sami.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MAC-SAMI', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MAC-SAMI', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MAC-SAMI'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MAC-SAMI', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0x00c5 +0x82 0x00c7 +0x83 0x00c9 +0x84 0x00d1 +0x85 0x00d6 +0x86 0x00dc +0x87 0x00e1 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x00e3 +0x8c 0x00e5 +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00ed +0x93 0x00ec +0x94 0x00ee +0x95 0x00ef +0x96 0x00f1 +0x97 0x00f3 +0x98 0x00f2 +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00f5 +0x9c 0x00fa +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa0 0x00dd +0xa1 0x00b0 +0xa2 0x010c +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x00df +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x00b4 +0xac 0x00a8 +0xad 0x2260 +0xae 0x00c6 +0xaf 0x00d8 +0xb0 0x0110 +0xb1 0x014a +0xb2 0x821e +0xb3 0x821f +0xb4 0x0160 +0xb5 0x0166 +0xb6 0x2202 +0xb7 0x017d +0xb8 0x010d +0xb9 0x0111 +0xba 0x014b +0xbb 0x0161 +0xbc 0x0167 +0xbd 0x017e +0xbe 0x00e6 +0xbf 0x00f8 +0xc0 0x00bf +0xc1 0x00a1 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x2206 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x00c0 +0xcc 0x00c3 +0xcd 0x00d5 +0xce 0x0152 +0xcf 0x0153 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x25ca +0xd8 0x00ff +0xd9 0x0178 +0xda 0x2044 +0xdb 0x00a4 +0xdc 0x00d0 +0xdd 0x00f0 +0xde 0x00de +0xdf 0x00fe +0xe0 0x00fd +0xe1 0x00b7 +0xe2 0x201a +0xe3 0x201e +0xe4 0x2030 +0xe5 0x00c2 +0xe6 0x00ca +0xe7 0x00c1 +0xe8 0x00cb +0xe9 0x00c8 +0xea 0x00cd +0xeb 0x00ce +0xec 0x00cf +0xed 0x00cc +0xee 0x00d3 +0xef 0x00d4 +0xf0 0xf8ff +0xf1 0x00d2 +0xf2 0x00da +0xf3 0x00db +0xf4 0x00d9 +0xf5 0x0131 +0xf6 0x01b7 +0xf7 0x0292 +0xf8 0x01ee +0xf9 0x01ef +0xfa 0x01e4 +0xfb 0x01e5 +0xfc 0x01e6 +0xfd 0x01e7 +0xfe 0x01e8 +0xff 0x01e9 diff --git a/tests/02mac-uk.t b/tests/02mac-uk.t new file mode 100644 index 0000000..d30b9ed --- /dev/null +++ b/tests/02mac-uk.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MAC-UK', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MAC-UK', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MAC-UK'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MAC-UK', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0410 +0x81 0x0411 +0x82 0x0412 +0x83 0x0413 +0x84 0x0414 +0x85 0x0415 +0x86 0x0416 +0x87 0x0417 +0x88 0x0418 +0x89 0x0419 +0x8a 0x041a +0x8b 0x041b +0x8c 0x041c +0x8d 0x041d +0x8e 0x041e +0x8f 0x041f +0x90 0x0420 +0x91 0x0421 +0x92 0x0422 +0x93 0x0423 +0x94 0x0424 +0x95 0x0425 +0x96 0x0426 +0x97 0x0427 +0x98 0x0428 +0x99 0x0429 +0x9a 0x042a +0x9b 0x042b +0x9c 0x042c +0x9d 0x042d +0x9e 0x042e +0x9f 0x042f +0xa0 0x2020 +0xa1 0x00b0 +0xa2 0x0490 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x0406 +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x0402 +0xac 0x0452 +0xad 0x2260 +0xae 0x0403 +0xaf 0x0453 +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x0456 +0xb5 0x00b5 +0xb6 0x0491 +0xb7 0x0408 +0xb8 0x0404 +0xb9 0x0454 +0xba 0x0407 +0xbb 0x0457 +0xbc 0x0409 +0xbd 0x0459 +0xbe 0x040a +0xbf 0x045a +0xc0 0x0458 +0xc1 0x0405 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x2206 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x040b +0xcc 0x045b +0xcd 0x040c +0xce 0x045c +0xcf 0x0455 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x201e +0xd8 0x040e +0xd9 0x045e +0xda 0x040f +0xdb 0x045f +0xdc 0x2116 +0xdd 0x0401 +0xde 0x0451 +0xdf 0x044f +0xe0 0x0430 +0xe1 0x0431 +0xe2 0x0432 +0xe3 0x0433 +0xe4 0x0434 +0xe5 0x0435 +0xe6 0x0436 +0xe7 0x0437 +0xe8 0x0438 +0xe9 0x0439 +0xea 0x043a +0xeb 0x043b +0xec 0x043c +0xed 0x043d +0xee 0x043e +0xef 0x043f +0xf0 0x0440 +0xf1 0x0441 +0xf2 0x0442 +0xf3 0x0443 +0xf4 0x0444 +0xf5 0x0445 +0xf6 0x0446 +0xf7 0x0447 +0xf8 0x0448 +0xf9 0x0449 +0xfa 0x044a +0xfb 0x044b +0xfc 0x044c +0xfd 0x044d +0xfe 0x044e +0xff 0x00a4 diff --git a/tests/02macarabic.t b/tests/02macarabic.t new file mode 100644 index 0000000..7839cb7 --- /dev/null +++ b/tests/02macarabic.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACARABIC', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACARABIC', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACARABIC'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACARABIC', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0x00a0 +0x82 0x00c7 +0x83 0x00c9 +0x84 0x00d1 +0x85 0x00d6 +0x86 0x00dc +0x87 0x00e1 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x06ba +0x8c 0x00ab +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00ed +0x93 0x2026 +0x94 0x00ee +0x95 0x00ef +0x96 0x00f1 +0x97 0x00f3 +0x98 0x00bb +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00f7 +0x9c 0x00fa +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa5 0xfffd +0xa5 0xfffd +0xa5 0xfffd +0xa5 0xfffd +0xa5 0xfffd +0xa5 0x066a +0xac 0xfffd +0xac 0xfffd +0xac 0xfffd +0xac 0xfffd +0xac 0xfffd +0xac 0xfffd +0xac 0x060c +0xb0 0xfffd +0xb0 0xfffd +0xb0 0xfffd +0xb0 0x0660 +0xb1 0x0661 +0xb2 0x0662 +0xb3 0x0663 +0xb4 0x0664 +0xb5 0x0665 +0xb6 0x0666 +0xb7 0x0667 +0xb8 0x0668 +0xb9 0x0669 +0xbb 0xfffd +0xbb 0x061b +0xbf 0xfffd +0xbf 0xfffd +0xbf 0xfffd +0xbf 0x061f +0xc0 0x066d +0xc1 0x0621 +0xc2 0x0622 +0xc3 0x0623 +0xc4 0x0624 +0xc5 0x0625 +0xc6 0x0626 +0xc7 0x0627 +0xc8 0x0628 +0xc9 0x0629 +0xca 0x062a +0xcb 0x062b +0xcc 0x062c +0xcd 0x062d +0xce 0x062e +0xcf 0x062f +0xd0 0x0630 +0xd1 0x0631 +0xd2 0x0632 +0xd3 0x0633 +0xd4 0x0634 +0xd5 0x0635 +0xd6 0x0636 +0xd7 0x0637 +0xd8 0x0638 +0xd9 0x0639 +0xda 0x063a +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0xfffd +0xe0 0x0640 +0xe1 0x0641 +0xe2 0x0642 +0xe3 0x0643 +0xe4 0x0644 +0xe5 0x0645 +0xe6 0x0646 +0xe7 0x0647 +0xe8 0x0648 +0xe9 0x0649 +0xea 0x064a +0xeb 0x064b +0xec 0x064c +0xed 0x064d +0xee 0x064e +0xef 0x064f +0xf0 0x0650 +0xf1 0x0651 +0xf2 0x0652 +0xf3 0x067e +0xf4 0x0679 +0xf5 0x0686 +0xf6 0x06d5 +0xf7 0x06a4 +0xf8 0x06af +0xf9 0x0688 +0xfa 0x0691 +0xfe 0xfffd +0xfe 0xfffd +0xfe 0xfffd +0xfe 0x0698 +0xff 0x06d2 diff --git a/tests/02maccroatian.t b/tests/02maccroatian.t new file mode 100644 index 0000000..da4edba --- /dev/null +++ b/tests/02maccroatian.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACCROATIAN', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACCROATIAN', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACCROATIAN'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACCROATIAN', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0x00c5 +0x82 0x00c7 +0x83 0x00c9 +0x84 0x00d1 +0x85 0x00d6 +0x86 0x00dc +0x87 0x00e1 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x00e3 +0x8c 0x00e5 +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00ed +0x93 0x00ec +0x94 0x00ee +0x95 0x00ef +0x96 0x00f1 +0x97 0x00f3 +0x98 0x00f2 +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00f5 +0x9c 0x00fa +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa0 0x2020 +0xa1 0x00b0 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x00df +0xa8 0x00ae +0xa9 0x0160 +0xaa 0x2122 +0xab 0x00b4 +0xac 0x00a8 +0xad 0x2260 +0xae 0x017d +0xaf 0x00d8 +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x2206 +0xb5 0x00b5 +0xb6 0x2202 +0xb7 0x2211 +0xb8 0x220f +0xb9 0x0161 +0xba 0x222b +0xbb 0x00aa +0xbc 0x00ba +0xbd 0x2126 +0xbe 0x017e +0xbf 0x00f8 +0xc0 0x00bf +0xc1 0x00a1 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x0106 +0xc7 0x00ab +0xc8 0x010c +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x00c0 +0xcc 0x00c3 +0xcd 0x00d5 +0xce 0x0152 +0xcf 0x0153 +0xd0 0x0110 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x25ca +0xd9 0xfffd +0xd9 0x00a9 +0xda 0x2044 +0xdb 0x00a4 +0xdc 0x2039 +0xdd 0x203a +0xde 0x00c6 +0xdf 0x00bb +0xe0 0x2013 +0xe1 0x00b7 +0xe2 0x201a +0xe3 0x201e +0xe4 0x2030 +0xe5 0x00c2 +0xe6 0x0107 +0xe7 0x00c1 +0xe8 0x010d +0xe9 0x00c8 +0xea 0x00cd +0xeb 0x00ce +0xec 0x00cf +0xed 0x00cc +0xee 0x00d3 +0xef 0x00d4 +0xf0 0x0111 +0xf1 0x00d2 +0xf2 0x00da +0xf3 0x00db +0xf4 0x00d9 +0xf5 0x0131 +0xf6 0x02c6 +0xf7 0x02dc +0xf8 0x00af +0xf9 0x03c0 +0xfa 0x00cb +0xfb 0x02da +0xfc 0x00b8 +0xfd 0x00ca +0xfe 0x00e6 +0xff 0x02c7 diff --git a/tests/02maccyrillic.t b/tests/02maccyrillic.t new file mode 100644 index 0000000..dc589c5 --- /dev/null +++ b/tests/02maccyrillic.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACCYRILLIC', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACCYRILLIC', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACCYRILLIC'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACCYRILLIC', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0410 +0x81 0x0411 +0x82 0x0412 +0x83 0x0413 +0x84 0x0414 +0x85 0x0415 +0x86 0x0416 +0x87 0x0417 +0x88 0x0418 +0x89 0x0419 +0x8a 0x041a +0x8b 0x041b +0x8c 0x041c +0x8d 0x041d +0x8e 0x041e +0x8f 0x041f +0x90 0x0420 +0x91 0x0421 +0x92 0x0422 +0x93 0x0423 +0x94 0x0424 +0x95 0x0425 +0x96 0x0426 +0x97 0x0427 +0x98 0x0428 +0x99 0x0429 +0x9a 0x042a +0x9b 0x042b +0x9c 0x042c +0x9d 0x042d +0x9e 0x042e +0x9f 0x042f +0xa0 0x2020 +0xa1 0x00b0 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x0406 +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x0402 +0xac 0x0452 +0xad 0x2260 +0xae 0x0403 +0xaf 0x0453 +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x0456 +0xb5 0x00b5 +0xb6 0x2202 +0xb7 0x0408 +0xb8 0x0404 +0xb9 0x0454 +0xba 0x0407 +0xbb 0x0457 +0xbc 0x0409 +0xbd 0x0459 +0xbe 0x040a +0xbf 0x045a +0xc0 0x0458 +0xc1 0x0405 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x2206 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x040b +0xcc 0x045b +0xcd 0x040c +0xce 0x045c +0xcf 0x0455 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x201e +0xd8 0x040e +0xd9 0x045e +0xda 0x040f +0xdb 0x045f +0xdc 0x2116 +0xdd 0x0401 +0xde 0x0451 +0xdf 0x044f +0xe0 0x0430 +0xe1 0x0431 +0xe2 0x0432 +0xe3 0x0433 +0xe4 0x0434 +0xe5 0x0435 +0xe6 0x0436 +0xe7 0x0437 +0xe8 0x0438 +0xe9 0x0439 +0xea 0x043a +0xeb 0x043b +0xec 0x043c +0xed 0x043d +0xee 0x043e +0xef 0x043f +0xf0 0x0440 +0xf1 0x0441 +0xf2 0x0442 +0xf3 0x0443 +0xf4 0x0444 +0xf5 0x0445 +0xf6 0x0446 +0xf7 0x0447 +0xf8 0x0448 +0xf9 0x0449 +0xfa 0x044a +0xfb 0x044b +0xfc 0x044c +0xfd 0x044d +0xfe 0x044e +0xff 0x00a4 diff --git a/tests/02macgreek.t b/tests/02macgreek.t new file mode 100644 index 0000000..f5fdd2c --- /dev/null +++ b/tests/02macgreek.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACGREEK', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACGREEK', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACGREEK'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACGREEK', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0x00b9 +0x82 0x00b2 +0x83 0x00c9 +0x84 0x00b3 +0x85 0x00d6 +0x86 0x00dc +0x87 0x0385 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x0384 +0x8c 0x00a8 +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00a3 +0x93 0x2122 +0x94 0x00ee +0x95 0x00ef +0x96 0x2022 +0x97 0x00bd +0x98 0x2030 +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00a6 +0x9c 0x00ad +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa0 0x2020 +0xa1 0x0393 +0xa2 0x0394 +0xa3 0x0398 +0xa4 0x039b +0xa5 0x039e +0xa6 0x03a0 +0xa7 0x00df +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x03a3 +0xab 0x03aa +0xac 0x00a7 +0xad 0x2260 +0xae 0x00b0 +0xaf 0x0387 +0xb0 0x0391 +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x00a5 +0xb5 0x0392 +0xb6 0x0395 +0xb7 0x0396 +0xb8 0x0397 +0xb9 0x0399 +0xba 0x039a +0xbb 0x039c +0xbc 0x03a6 +0xbd 0x03ab +0xbe 0x03a8 +0xbf 0x03a9 +0xc0 0x03ac +0xc1 0x039d +0xc2 0x00ac +0xc3 0x039f +0xc4 0x03a1 +0xc5 0x2248 +0xc6 0x03a4 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x03a5 +0xcc 0x03a7 +0xcd 0x0386 +0xce 0x0388 +0xcf 0x0153 +0xd0 0x2013 +0xd1 0x2015 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x0389 +0xd8 0x038a +0xd9 0x038c +0xda 0x038e +0xdb 0x03ad +0xdc 0x03ae +0xdd 0x03af +0xde 0x03cc +0xdf 0x038f +0xe0 0x03cd +0xe1 0x03b1 +0xe2 0x03b2 +0xe3 0x03c8 +0xe4 0x03b4 +0xe5 0x03b5 +0xe6 0x03c6 +0xe7 0x03b3 +0xe8 0x03b7 +0xe9 0x03b9 +0xea 0x03be +0xeb 0x03ba +0xec 0x03bb +0xed 0x03bc +0xee 0x03bd +0xef 0x03bf +0xf0 0x03c0 +0xf1 0x03ce +0xf2 0x03c1 +0xf3 0x03c3 +0xf4 0x03c4 +0xf5 0x03b8 +0xf6 0x03c9 +0xf7 0x03c2 +0xf8 0x03c7 +0xf9 0x03c5 +0xfa 0x03b6 +0xfb 0x03ca +0xfc 0x03cb +0xfd 0x0390 +0xfe 0x03b0 +0xff 0xfffd diff --git a/tests/02machebrew.t b/tests/02machebrew.t new file mode 100644 index 0000000..fcde1a7 --- /dev/null +++ b/tests/02machebrew.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACHEBREW', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACHEBREW', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACHEBREW'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACHEBREW', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0xfb1f +0x82 0x00c7 +0x83 0x00c9 +0x84 0x00d1 +0x85 0x00d6 +0x86 0x00dc +0x87 0x00e1 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x00e3 +0x8c 0x00e5 +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00ed +0x93 0x00ec +0x94 0x00ee +0x95 0x00ef +0x96 0x00f1 +0x97 0x00f3 +0x98 0x00f2 +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00f5 +0x9c 0x00fa +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa6 0xfffd +0xa6 0xfffd +0xa6 0xfffd +0xa6 0xfffd +0xa6 0xfffd +0xa6 0xfffd +0xa6 0x20aa +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0xfffd +0xc1 0x201e +0xc6 0xfffd +0xc6 0xfffd +0xc6 0xfffd +0xc6 0xfffd +0xc6 0x05bc +0xc7 0xfb4b +0xc8 0xfb35 +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x05b8 +0xcc 0x05b7 +0xcd 0x05b5 +0xce 0x05b6 +0xcf 0x05b4 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0xfb2a +0xd7 0xfb2b +0xd8 0x05bf +0xd9 0x05b0 +0xda 0x05b2 +0xdb 0x05b1 +0xdc 0x05bb +0xdd 0x05b9 +0xdf 0xfffd +0xdf 0x05b3 +0xe0 0x05d0 +0xe1 0x05d1 +0xe2 0x05d2 +0xe3 0x05d3 +0xe4 0x05d4 +0xe5 0x05d5 +0xe6 0x05d6 +0xe7 0x05d7 +0xe8 0x05d8 +0xe9 0x05d9 +0xea 0x05da +0xeb 0x05db +0xec 0x05dc +0xed 0x05dd +0xee 0x05de +0xef 0x05df +0xf0 0x05e0 +0xf1 0x05e1 +0xf2 0x05e2 +0xf3 0x05e3 +0xf4 0x05e4 +0xf5 0x05e5 +0xf6 0x05e6 +0xf7 0x05e7 +0xf8 0x05e8 +0xf9 0x05e9 +0xfa 0x05ea +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02maciceland.t b/tests/02maciceland.t new file mode 100644 index 0000000..6a9d048 --- /dev/null +++ b/tests/02maciceland.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACICELAND', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACICELAND', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACICELAND'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACICELAND', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0x00c5 +0x82 0x00c7 +0x83 0x00c9 +0x84 0x00d1 +0x85 0x00d6 +0x86 0x00dc +0x87 0x00e1 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x00e3 +0x8c 0x00e5 +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00ed +0x93 0x00ec +0x94 0x00ee +0x95 0x00ef +0x96 0x00f1 +0x97 0x00f3 +0x98 0x00f2 +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00f5 +0x9c 0x00fa +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa0 0x00dd +0xa1 0x00b0 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x00df +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x00b4 +0xac 0x00a8 +0xad 0x2260 +0xae 0x00c6 +0xaf 0x00d8 +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x00a5 +0xb5 0x00b5 +0xb6 0x2202 +0xb7 0x2211 +0xb8 0x220f +0xb9 0x03c0 +0xba 0x222b +0xbb 0x00aa +0xbc 0x00ba +0xbd 0x2126 +0xbe 0x00e6 +0xbf 0x00f8 +0xc0 0x00bf +0xc1 0x00a1 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x2206 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x00c0 +0xcc 0x00c3 +0xcd 0x00d5 +0xce 0x0152 +0xcf 0x0153 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x25ca +0xd8 0x00ff +0xd9 0x0178 +0xda 0x2044 +0xdb 0x00a4 +0xdc 0x00d0 +0xdd 0x00f0 +0xde 0x00de +0xdf 0x00fe +0xe0 0x00fd +0xe1 0x00b7 +0xe2 0x201a +0xe3 0x201e +0xe4 0x2030 +0xe5 0x00c2 +0xe6 0x00ca +0xe7 0x00c1 +0xe8 0x00cb +0xe9 0x00c8 +0xea 0x00cd +0xeb 0x00ce +0xec 0x00cf +0xed 0x00cc +0xee 0x00d3 +0xef 0x00d4 +0xf1 0xfffd +0xf1 0x00d2 +0xf2 0x00da +0xf3 0x00db +0xf4 0x00d9 +0xf5 0x0131 +0xf6 0x02c6 +0xf7 0x02dc +0xf8 0x00af +0xf9 0x02d8 +0xfa 0x02d9 +0xfb 0x02da +0xfc 0x00b8 +0xfd 0x02dd +0xfe 0x02db +0xff 0x02c7 diff --git a/tests/02macintosh.t b/tests/02macintosh.t new file mode 100644 index 0000000..8ff26bf --- /dev/null +++ b/tests/02macintosh.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACINTOSH', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACINTOSH', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACINTOSH'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACINTOSH', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0x00c5 +0x82 0x00c7 +0x83 0x00c9 +0x84 0x00d1 +0x85 0x00d6 +0x86 0x00dc +0x87 0x00e1 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x00e3 +0x8c 0x00e5 +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00ed +0x93 0x00ec +0x94 0x00ee +0x95 0x00ef +0x96 0x00f1 +0x97 0x00f3 +0x98 0x00f2 +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00f5 +0x9c 0x00fa +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa0 0x2020 +0xa1 0x00b0 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x00df +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x00b4 +0xac 0x00a8 +0xad 0x2260 +0xae 0x00c6 +0xaf 0x00d8 +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x00a5 +0xb5 0x00b5 +0xb6 0x2202 +0xb7 0x2211 +0xb8 0x220f +0xb9 0x03c0 +0xba 0x222b +0xbb 0x00aa +0xbc 0x00ba +0xbd 0x03a9 +0xbe 0x00e6 +0xbf 0x00f8 +0xc0 0x00bf +0xc1 0x00a1 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x0394 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x00c0 +0xcc 0x00c3 +0xcd 0x00d5 +0xce 0x0152 +0xcf 0x0153 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x25ca +0xd8 0x00ff +0xd9 0x0178 +0xda 0x2044 +0xdb 0x20ac +0xdc 0x2039 +0xdd 0x203a +0xde 0xfb01 +0xdf 0xfb02 +0xe0 0x2021 +0xe1 0x00b7 +0xe2 0x201a +0xe3 0x201e +0xe4 0x2030 +0xe5 0x00c2 +0xe6 0x00ca +0xe7 0x00c1 +0xe8 0x00cb +0xe9 0x00c8 +0xea 0x00cd +0xeb 0x00ce +0xec 0x00cf +0xed 0x00cc +0xee 0x00d3 +0xef 0x00d4 +0xf0 0xe01e +0xf1 0x00d2 +0xf2 0x00da +0xf3 0x00db +0xf4 0x00d9 +0xf5 0x0131 +0xf6 0x02c6 +0xf7 0x02dc +0xf8 0x00af +0xf9 0x02d8 +0xfa 0x02d9 +0xfb 0x02da +0xfc 0x00b8 +0xfd 0x02dd +0xfe 0x02db +0xff 0x02c7 diff --git a/tests/02macromania.t b/tests/02macromania.t new file mode 100644 index 0000000..40bb565 --- /dev/null +++ b/tests/02macromania.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACROMANIA', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACROMANIA', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACROMANIA'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACROMANIA', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0x00c5 +0x82 0x00c7 +0x83 0x00c9 +0x84 0x00d1 +0x85 0x00d6 +0x86 0x00dc +0x87 0x00e1 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x00e3 +0x8c 0x00e5 +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00ed +0x93 0x00ec +0x94 0x00ee +0x95 0x00ef +0x96 0x00f1 +0x97 0x00f3 +0x98 0x00f2 +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00f5 +0x9c 0x00fa +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa0 0x2020 +0xa1 0x00b0 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x00df +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x00b4 +0xac 0x00a8 +0xad 0x2260 +0xae 0x0102 +0xaf 0x015e +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x00a5 +0xb5 0x00b5 +0xb6 0x2202 +0xb7 0x2211 +0xb8 0x220f +0xb9 0x03c0 +0xba 0x222b +0xbb 0x00aa +0xbc 0x00ba +0xbd 0x2126 +0xbe 0x0103 +0xbf 0x015f +0xc0 0x00bf +0xc1 0x00a1 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x2206 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x00c0 +0xcc 0x00c3 +0xcd 0x00d5 +0xce 0x0152 +0xcf 0x0153 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x25ca +0xd8 0x00ff +0xd9 0x0178 +0xda 0x2044 +0xdb 0x00a4 +0xdc 0x2039 +0xdd 0x203a +0xde 0x0162 +0xdf 0x0163 +0xe0 0x2021 +0xe1 0x00b7 +0xe2 0x201a +0xe3 0x201e +0xe4 0x2030 +0xe5 0x00c2 +0xe6 0x00ca +0xe7 0x00c1 +0xe8 0x00cb +0xe9 0x00c8 +0xea 0x00cd +0xeb 0x00ce +0xec 0x00cf +0xed 0x00cc +0xee 0x00d3 +0xef 0x00d4 +0xf1 0xfffd +0xf1 0x00d2 +0xf2 0x00da +0xf3 0x00db +0xf4 0x00d9 +0xf5 0x0131 +0xf6 0x02c6 +0xf7 0x02dc +0xf8 0x00af +0xf9 0x02d8 +0xfa 0x02d9 +0xfb 0x02da +0xfc 0x00b8 +0xfd 0x02dd +0xfe 0x02db +0xff 0x02c7 diff --git a/tests/02macthai.t b/tests/02macthai.t new file mode 100644 index 0000000..6d2234e --- /dev/null +++ b/tests/02macthai.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACTHAI', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACTHAI', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACTHAI'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACTHAI', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00ab +0x81 0x00bb +0x82 0x2026 +0x83 0xf88c +0x84 0xf88f +0x85 0xf892 +0x86 0xf895 +0x87 0xf898 +0x88 0xf88b +0x89 0xf88e +0x8a 0xf891 +0x8b 0xf894 +0x8c 0xf897 +0x8d 0x201c +0x8e 0x201d +0x8f 0xf899 +0x91 0xfffd +0x91 0x2022 +0x92 0xf884 +0x93 0xf889 +0x94 0xf885 +0x95 0xf886 +0x96 0xf887 +0x97 0xf888 +0x98 0xf88a +0x99 0xf88d +0x9a 0xf890 +0x9b 0xf893 +0x9c 0xf896 +0x9d 0x2018 +0x9e 0x2019 +0xa0 0xfffd +0xa0 0x00a0 +0xa1 0x0e01 +0xa2 0x0e02 +0xa3 0x0e03 +0xa4 0x0e04 +0xa5 0x0e05 +0xa6 0x0e06 +0xa7 0x0e07 +0xa8 0x0e08 +0xa9 0x0e09 +0xaa 0x0e0a +0xab 0x0e0b +0xac 0x0e0c +0xad 0x0e0d +0xae 0x0e0e +0xaf 0x0e0f +0xb0 0x0e10 +0xb1 0x0e11 +0xb2 0x0e12 +0xb3 0x0e13 +0xb4 0x0e14 +0xb5 0x0e15 +0xb6 0x0e16 +0xb7 0x0e17 +0xb8 0x0e18 +0xb9 0x0e19 +0xba 0x0e1a +0xbb 0x0e1b +0xbc 0x0e1c +0xbd 0x0e1d +0xbe 0x0e1e +0xbf 0x0e1f +0xc0 0x0e20 +0xc1 0x0e21 +0xc2 0x0e22 +0xc3 0x0e23 +0xc4 0x0e24 +0xc5 0x0e25 +0xc6 0x0e26 +0xc7 0x0e27 +0xc8 0x0e28 +0xc9 0x0e29 +0xca 0x0e2a +0xcb 0x0e2b +0xcc 0x0e2c +0xcd 0x0e2d +0xce 0x0e2e +0xcf 0x0e2f +0xd0 0x0e30 +0xd1 0x0e31 +0xd2 0x0e32 +0xd3 0x0e33 +0xd4 0x0e34 +0xd5 0x0e35 +0xd6 0x0e36 +0xd7 0x0e37 +0xd8 0x0e38 +0xd9 0x0e39 +0xda 0x0e3a +0xdb 0xfeff +0xdc 0x200b +0xdd 0x2013 +0xde 0x2014 +0xdf 0x0e3f +0xe0 0x0e40 +0xe1 0x0e41 +0xe2 0x0e42 +0xe3 0x0e43 +0xe4 0x0e44 +0xe5 0x0e45 +0xe6 0x0e46 +0xe7 0x0e47 +0xe8 0x0e48 +0xe9 0x0e49 +0xea 0x0e4a +0xeb 0x0e4b +0xec 0x0e4c +0xed 0x0e4d +0xee 0x2122 +0xef 0x0e4f +0xf0 0x0e50 +0xf1 0x0e51 +0xf2 0x0e52 +0xf3 0x0e53 +0xf4 0x0e54 +0xf5 0x0e55 +0xf6 0x0e56 +0xf7 0x0e57 +0xf8 0x0e58 +0xf9 0x0e59 +0xfa 0x00ae +0xfb 0x00a9 +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02macturkish.t b/tests/02macturkish.t new file mode 100644 index 0000000..82792c0 --- /dev/null +++ b/tests/02macturkish.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACTURKISH', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACTURKISH', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACTURKISH'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACTURKISH', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00c4 +0x81 0x00c5 +0x82 0x00c7 +0x83 0x00c9 +0x84 0x00d1 +0x85 0x00d6 +0x86 0x00dc +0x87 0x00e1 +0x88 0x00e0 +0x89 0x00e2 +0x8a 0x00e4 +0x8b 0x00e3 +0x8c 0x00e5 +0x8d 0x00e7 +0x8e 0x00e9 +0x8f 0x00e8 +0x90 0x00ea +0x91 0x00eb +0x92 0x00ed +0x93 0x00ec +0x94 0x00ee +0x95 0x00ef +0x96 0x00f1 +0x97 0x00f3 +0x98 0x00f2 +0x99 0x00f4 +0x9a 0x00f6 +0x9b 0x00f5 +0x9c 0x00fa +0x9d 0x00f9 +0x9e 0x00fb +0x9f 0x00fc +0xa0 0x2020 +0xa1 0x00b0 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x00df +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x00b4 +0xac 0x00a8 +0xad 0x2260 +0xae 0x00c6 +0xaf 0x00d8 +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x00a5 +0xb5 0x00b5 +0xb6 0x2202 +0xb7 0x2211 +0xb8 0x220f +0xb9 0x03c0 +0xba 0x222b +0xbb 0x00aa +0xbc 0x00ba +0xbd 0x2126 +0xbe 0x00e6 +0xbf 0x00f8 +0xc0 0x00bf +0xc1 0x00a1 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x2206 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x00c0 +0xcc 0x00c3 +0xcd 0x00d5 +0xce 0x0152 +0xcf 0x0153 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x25ca +0xd8 0x00ff +0xd9 0x0178 +0xda 0x011e +0xdb 0x011f +0xdc 0x0130 +0xdd 0x0131 +0xde 0x015e +0xdf 0x015f +0xe0 0x2021 +0xe1 0x00b7 +0xe2 0x201a +0xe3 0x201e +0xe4 0x2030 +0xe5 0x00c2 +0xe6 0x00ca +0xe7 0x00c1 +0xe8 0x00cb +0xe9 0x00c8 +0xea 0x00cd +0xeb 0x00ce +0xec 0x00cf +0xed 0x00cc +0xee 0x00d3 +0xef 0x00d4 +0xf1 0xfffd +0xf1 0x00d2 +0xf2 0x00da +0xf3 0x00db +0xf4 0x00d9 +0xf6 0xfffd +0xf6 0x02c6 +0xf7 0x02dc +0xf8 0x00af +0xf9 0x02d8 +0xfa 0x02d9 +0xfb 0x02da +0xfc 0x00b8 +0xfd 0x02dd +0xfe 0x02db +0xff 0x02c7 diff --git a/tests/02macukraine.t b/tests/02macukraine.t new file mode 100644 index 0000000..e65ef7c --- /dev/null +++ b/tests/02macukraine.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'MACUKRAINE', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'MACUKRAINE', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACUKRAINE'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'MACUKRAINE', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x0410 +0x81 0x0411 +0x82 0x0412 +0x83 0x0413 +0x84 0x0414 +0x85 0x0415 +0x86 0x0416 +0x87 0x0417 +0x88 0x0418 +0x89 0x0419 +0x8a 0x041a +0x8b 0x041b +0x8c 0x041c +0x8d 0x041d +0x8e 0x041e +0x8f 0x041f +0x90 0x0420 +0x91 0x0421 +0x92 0x0422 +0x93 0x0423 +0x94 0x0424 +0x95 0x0425 +0x96 0x0426 +0x97 0x0427 +0x98 0x0428 +0x99 0x0429 +0x9a 0x042a +0x9b 0x042b +0x9c 0x042c +0x9d 0x042d +0x9e 0x042e +0x9f 0x042f +0xa0 0x2020 +0xa1 0x00b0 +0xa2 0x0490 +0xa3 0x00a3 +0xa4 0x00a7 +0xa5 0x2022 +0xa6 0x00b6 +0xa7 0x0406 +0xa8 0x00ae +0xa9 0x00a9 +0xaa 0x2122 +0xab 0x0402 +0xac 0x0452 +0xad 0x2260 +0xae 0x0403 +0xaf 0x0453 +0xb0 0x221e +0xb1 0x00b1 +0xb2 0x2264 +0xb3 0x2265 +0xb4 0x0456 +0xb5 0x00b5 +0xb6 0x0491 +0xb7 0x0408 +0xb8 0x0404 +0xb9 0x0454 +0xba 0x0407 +0xbb 0x0457 +0xbc 0x0409 +0xbd 0x0459 +0xbe 0x040a +0xbf 0x045a +0xc0 0x0458 +0xc1 0x0405 +0xc2 0x00ac +0xc3 0x221a +0xc4 0x0192 +0xc5 0x2248 +0xc6 0x2206 +0xc7 0x00ab +0xc8 0x00bb +0xc9 0x2026 +0xca 0x00a0 +0xcb 0x040b +0xcc 0x045b +0xcd 0x040c +0xce 0x045c +0xcf 0x0455 +0xd0 0x2013 +0xd1 0x2014 +0xd2 0x201c +0xd3 0x201d +0xd4 0x2018 +0xd5 0x2019 +0xd6 0x00f7 +0xd7 0x201e +0xd8 0x040e +0xd9 0x045e +0xda 0x040f +0xdb 0x045f +0xdc 0x2116 +0xdd 0x0401 +0xde 0x0451 +0xdf 0x044f +0xe0 0x0430 +0xe1 0x0431 +0xe2 0x0432 +0xe3 0x0433 +0xe4 0x0434 +0xe5 0x0435 +0xe6 0x0436 +0xe7 0x0437 +0xe8 0x0438 +0xe9 0x0439 +0xea 0x043a +0xeb 0x043b +0xec 0x043c +0xed 0x043d +0xee 0x043e +0xef 0x043f +0xf0 0x0440 +0xf1 0x0441 +0xf2 0x0442 +0xf3 0x0443 +0xf4 0x0444 +0xf5 0x0445 +0xf6 0x0446 +0xf7 0x0447 +0xf8 0x0448 +0xf9 0x0449 +0xfa 0x044a +0xfb 0x044b +0xfc 0x044c +0xfd 0x044d +0xfe 0x044e +0xff 0x00a4 diff --git a/tests/02nats-dano.t b/tests/02nats-dano.t new file mode 100644 index 0000000..52d6f4b --- /dev/null +++ b/tests/02nats-dano.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'NATS-DANO', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'NATS-DANO', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'NATS-DANO'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'NATS-DANO', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x00ab +0x23 0x00bb +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0xe018 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x00c6 +0x5c 0x00d8 +0x5d 0x00c5 +0x5e 0x25a0 +0x5f 0x005f +0x60 0xe019 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x00e6 +0x7c 0x00f8 +0x7d 0x00e5 +0x7e 0x2013 +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02nats-sefi.t b/tests/02nats-sefi.t new file mode 100644 index 0000000..66e83af --- /dev/null +++ b/tests/02nats-sefi.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'NATS-SEFI', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'NATS-SEFI', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'NATS-SEFI'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'NATS-SEFI', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0xe018 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x00c4 +0x5c 0x00d6 +0x5d 0x00c5 +0x5e 0x25a0 +0x5f 0x005f +0x60 0xe019 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x00e4 +0x7c 0x00f6 +0x7d 0x00e5 +0x7e 0x2013 +0x7f 0x007f +0x80 0xfffd +0x81 0xfffd +0x82 0xfffd +0x83 0xfffd +0x84 0xfffd +0x85 0xfffd +0x86 0xfffd +0x87 0xfffd +0x88 0xfffd +0x89 0xfffd +0x8a 0xfffd +0x8b 0xfffd +0x8c 0xfffd +0x8d 0xfffd +0x8e 0xfffd +0x8f 0xfffd +0x90 0xfffd +0x91 0xfffd +0x92 0xfffd +0x93 0xfffd +0x94 0xfffd +0x95 0xfffd +0x96 0xfffd +0x97 0xfffd +0x98 0xfffd +0x99 0xfffd +0x9a 0xfffd +0x9b 0xfffd +0x9c 0xfffd +0x9d 0xfffd +0x9e 0xfffd +0x9f 0xfffd +0xa0 0xfffd +0xa1 0xfffd +0xa2 0xfffd +0xa3 0xfffd +0xa4 0xfffd +0xa5 0xfffd +0xa6 0xfffd +0xa7 0xfffd +0xa8 0xfffd +0xa9 0xfffd +0xaa 0xfffd +0xab 0xfffd +0xac 0xfffd +0xad 0xfffd +0xae 0xfffd +0xaf 0xfffd +0xb0 0xfffd +0xb1 0xfffd +0xb2 0xfffd +0xb3 0xfffd +0xb4 0xfffd +0xb5 0xfffd +0xb6 0xfffd +0xb7 0xfffd +0xb8 0xfffd +0xb9 0xfffd +0xba 0xfffd +0xbb 0xfffd +0xbc 0xfffd +0xbd 0xfffd +0xbe 0xfffd +0xbf 0xfffd +0xc0 0xfffd +0xc1 0xfffd +0xc2 0xfffd +0xc3 0xfffd +0xc4 0xfffd +0xc5 0xfffd +0xc6 0xfffd +0xc7 0xfffd +0xc8 0xfffd +0xc9 0xfffd +0xca 0xfffd +0xcb 0xfffd +0xcc 0xfffd +0xcd 0xfffd +0xce 0xfffd +0xcf 0xfffd +0xd0 0xfffd +0xd1 0xfffd +0xd2 0xfffd +0xd3 0xfffd +0xd4 0xfffd +0xd5 0xfffd +0xd6 0xfffd +0xd7 0xfffd +0xd8 0xfffd +0xd9 0xfffd +0xda 0xfffd +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0xfffd +0xe0 0xfffd +0xe1 0xfffd +0xe2 0xfffd +0xe3 0xfffd +0xe4 0xfffd +0xe5 0xfffd +0xe6 0xfffd +0xe7 0xfffd +0xe8 0xfffd +0xe9 0xfffd +0xea 0xfffd +0xeb 0xfffd +0xec 0xfffd +0xed 0xfffd +0xee 0xfffd +0xef 0xfffd +0xf0 0xfffd +0xf1 0xfffd +0xf2 0xfffd +0xf3 0xfffd +0xf4 0xfffd +0xf5 0xfffd +0xf6 0xfffd +0xf7 0xfffd +0xf8 0xfffd +0xf9 0xfffd +0xfa 0xfffd +0xfb 0xfffd +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02nextstep.t b/tests/02nextstep.t new file mode 100644 index 0000000..2c05624 --- /dev/null +++ b/tests/02nextstep.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'NEXTSTEP', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'NEXTSTEP', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'NEXTSTEP'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'NEXTSTEP', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x00a0 +0x81 0x00c0 +0x82 0x00c1 +0x83 0x00c2 +0x84 0x00c3 +0x85 0x00c4 +0x86 0x00c5 +0x87 0x00c7 +0x88 0x00c8 +0x89 0x00c9 +0x8a 0x00ca +0x8b 0x00cb +0x8c 0x00cc +0x8d 0x00cd +0x8e 0x00ce +0x8f 0x00cf +0x90 0x00d0 +0x91 0x00d1 +0x92 0x00d2 +0x93 0x00d3 +0x94 0x00d4 +0x95 0x00d5 +0x96 0x00d6 +0x97 0x00d9 +0x98 0x00da +0x99 0x00db +0x9a 0x00dc +0x9b 0x00dd +0x9c 0x00de +0x9d 0x00b5 +0x9e 0x00d7 +0x9f 0x00f7 +0xa0 0x00a9 +0xa1 0x00a1 +0xa2 0x00a2 +0xa3 0x00a3 +0xa4 0x2044 +0xa5 0x00a5 +0xa6 0x0192 +0xa7 0x00a7 +0xa8 0x00a4 +0xa9 0x2019 +0xaa 0x201c +0xab 0x00ab +0xac 0x2039 +0xad 0x203a +0xae 0xfb01 +0xaf 0xfb02 +0xb0 0x00ae +0xb1 0x2013 +0xb2 0x2020 +0xb3 0x2021 +0xb4 0x00b7 +0xb5 0x00a6 +0xb6 0x00b6 +0xb7 0x2022 +0xb8 0x201a +0xb9 0x201e +0xba 0x201d +0xbb 0x00bb +0xbc 0x2026 +0xbd 0x2030 +0xbe 0x00ac +0xbf 0x00bf +0xc0 0x00b9 +0xc1 0x02cb +0xc2 0x00b4 +0xc3 0x02c6 +0xc4 0x02dc +0xc5 0x00af +0xc6 0x02d8 +0xc7 0x02d9 +0xc8 0x00a8 +0xc9 0x00b2 +0xca 0x02da +0xcb 0x00b8 +0xcc 0x00b3 +0xcd 0x02dd +0xce 0x02db +0xcf 0x02c7 +0xd0 0x2014 +0xd1 0x00b1 +0xd2 0x00bc +0xd3 0x00bd +0xd4 0x00be +0xd5 0x00e0 +0xd6 0x00e1 +0xd7 0x00e2 +0xd8 0x00e3 +0xd9 0x00e4 +0xda 0x00e5 +0xdb 0x00e7 +0xdc 0x00e8 +0xdd 0x00e9 +0xde 0x00ea +0xdf 0x00eb +0xe0 0x00ec +0xe1 0x00c6 +0xe2 0x00ed +0xe3 0x00aa +0xe4 0x00ee +0xe5 0x00ef +0xe6 0x00f0 +0xe7 0x00f1 +0xe8 0x0141 +0xe9 0x00d8 +0xea 0x0152 +0xeb 0x00ba +0xec 0x00f2 +0xed 0x00f3 +0xee 0x00f4 +0xef 0x00f5 +0xf0 0x00f6 +0xf1 0x00e6 +0xf2 0x00f9 +0xf3 0x00fa +0xf4 0x00fb +0xf5 0x0131 +0xf6 0x00fc +0xf7 0x00fd +0xf8 0x0142 +0xf9 0x00f8 +0xfa 0x0153 +0xfb 0x00df +0xfc 0x00fe +0xfd 0x00ff +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02sami-ws2.t b/tests/02sami-ws2.t new file mode 100644 index 0000000..7b92cf7 --- /dev/null +++ b/tests/02sami-ws2.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'WIN-SAMI-2', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'WIN-SAMI-2', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'WIN-SAMI-2'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'WIN-SAMI-2', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x20ac +0x82 0xfffd +0x82 0x010c +0x83 0x0192 +0x84 0x010d +0x85 0x01b7 +0x86 0x0292 +0x87 0x01ee +0x88 0x01ef +0x89 0x0110 +0x8a 0x0160 +0x8b 0x2039 +0x8c 0x0152 +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0xfffd +0x91 0x2018 +0x92 0x2019 +0x93 0x201c +0x94 0x201d +0x95 0x2022 +0x96 0x2013 +0x97 0x2014 +0x98 0x0111 +0x99 0x01e6 +0x9a 0x0161 +0x9b 0x203a +0x9c 0x0153 +0x9f 0xfffd +0x9f 0xfffd +0x9f 0x0178 +0xa0 0x00a0 +0xa1 0x01e7 +0xa2 0x01e4 +0xa3 0x00a3 +0xa4 0x00a4 +0xa5 0x01e5 +0xa6 0x00a6 +0xa7 0x00a7 +0xa8 0x00a8 +0xa9 0x00a9 +0xaa 0x021e +0xab 0x00ab +0xac 0x00ac +0xad 0x00ad +0xae 0x00ae +0xaf 0x021f +0xb0 0x00b0 +0xb1 0x00b1 +0xb2 0x01e8 +0xb3 0x01e9 +0xb4 0x00b4 +0xb5 0x00b5 +0xb6 0x00b6 +0xb7 0x00b7 +0xb8 0x014a +0xb9 0x014b +0xba 0x0166 +0xbb 0x00bb +0xbc 0x0167 +0xbd 0x00bd +0xbe 0x017d +0xbf 0x017e +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x00c4 +0xc5 0x00c5 +0xc6 0x00c6 +0xc7 0x00c7 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x00cb +0xcc 0x00cc +0xcd 0x00cd +0xce 0x00ce +0xcf 0x00cf +0xd0 0x00d0 +0xd1 0x00d1 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x00d5 +0xd6 0x00d6 +0xd7 0x00d7 +0xd8 0x00d8 +0xd9 0x00d9 +0xda 0x00da +0xdb 0x00db +0xdc 0x00dc +0xdd 0x00dd +0xde 0x00de +0xdf 0x00df +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x00e4 +0xe5 0x00e5 +0xe6 0x00e6 +0xe7 0x00e7 +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x00eb +0xec 0x00ec +0xed 0x00ed +0xee 0x00ee +0xef 0x00ef +0xf0 0x00f0 +0xf1 0x00f1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x00f6 +0xf7 0x00f7 +0xf8 0x00f8 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x00fb +0xfc 0x00fc +0xfd 0x00fd +0xfe 0x00fe +0xff 0x00ff diff --git a/tests/02tis-620.t b/tests/02tis-620.t new file mode 100644 index 0000000..29529c2 --- /dev/null +++ b/tests/02tis-620.t @@ -0,0 +1,367 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'TIS-620', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'TIS-620', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'TIS-620'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'TIS-620', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x001e +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0xa0 0xfffd +0xa1 0x0e01 +0xa2 0x0e02 +0xa3 0x0e03 +0xa4 0x0e04 +0xa5 0x0e05 +0xa6 0x0e06 +0xa7 0x0e07 +0xa8 0x0e08 +0xa9 0x0e09 +0xaa 0x0e0a +0xab 0x0e0b +0xac 0x0e0c +0xad 0x0e0d +0xae 0x0e0e +0xaf 0x0e0f +0xb0 0x0e10 +0xb1 0x0e11 +0xb2 0x0e12 +0xb3 0x0e13 +0xb4 0x0e14 +0xb5 0x0e15 +0xb6 0x0e16 +0xb7 0x0e17 +0xb8 0x0e18 +0xb9 0x0e19 +0xba 0x0e1a +0xbb 0x0e1b +0xbc 0x0e1c +0xbd 0x0e1d +0xbe 0x0e1e +0xbf 0x0e1f +0xc0 0x0e20 +0xc1 0x0e21 +0xc2 0x0e22 +0xc3 0x0e23 +0xc4 0x0e24 +0xc5 0x0e25 +0xc6 0x0e26 +0xc7 0x0e27 +0xc8 0x0e28 +0xc9 0x0e29 +0xca 0x0e2a +0xcb 0x0e2b +0xcc 0x0e2c +0xcd 0x0e2d +0xce 0x0e2e +0xcf 0x0e2f +0xd0 0x0e30 +0xd1 0x0e31 +0xd2 0x0e32 +0xd3 0x0e33 +0xd4 0x0e34 +0xd5 0x0e35 +0xd6 0x0e36 +0xd7 0x0e37 +0xd8 0x0e38 +0xd9 0x0e39 +0xda 0x0e3a +0xdb 0xfffd +0xdc 0xfffd +0xdd 0xfffd +0xde 0xfffd +0xdf 0x0e3f +0xe0 0x0e40 +0xe1 0x0e41 +0xe2 0x0e42 +0xe3 0x0e43 +0xe4 0x0e44 +0xe5 0x0e45 +0xe6 0x0e46 +0xe7 0x0e47 +0xe8 0x0e48 +0xe9 0x0e49 +0xea 0x0e4a +0xeb 0x0e4b +0xec 0x0e4c +0xed 0x0e4d +0xee 0x0e4e +0xef 0x0e4f +0xf0 0x0e50 +0xf1 0x0e51 +0xf2 0x0e52 +0xf3 0x0e53 +0xf4 0x0e54 +0xf5 0x0e55 +0xf6 0x0e56 +0xf7 0x0e57 +0xf8 0x0e58 +0xf9 0x0e59 +0xfa 0x0e5a +0xfb 0x0e5b +0xfc 0xfffd +0xfd 0xfffd +0xfe 0xfffd +0xff 0xfffd diff --git a/tests/02us-ascii.t b/tests/02us-ascii.t new file mode 100644 index 0000000..ed33fda --- /dev/null +++ b/tests/02us-ascii.t @@ -0,0 +1,269 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $codes = {}; +while () { + my ($code, $ucs4, undef) = split /\s+/, $_; + $codes->{oct $code} = oct $ucs4; +} + +my $cd_int = Locale::Recode->new (from => 'ASCII', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'ASCII', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ASCII'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs4) = each %$codes) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs4) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs4) = each %$codes) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs4) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($code, $ucs4) = each %$codes) { + my $outbuf = [ $ucs4 ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'ISO-8859-2', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +# Local Variables: +# mode: perl +# perl-indent-level: 4 +# perl-continued-statement-offset: 4 +# perl-continued-brace-offset: 0 +# perl-brace-offset: -4 +# perl-brace-imaginary-offset: 0 +# perl-label-offset: -4 +# cperl-indent-level: 4 +# cperl-continued-statement-offset: 2 +# tab-width: 4 +# End: + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0A 0x000A +0x0B 0x000B +0x0C 0x000C +0x0D 0x000D +0x0E 0x000E +0x0F 0x000F +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1A 0x001A +0x1B 0x001B +0x1C 0x001C +0x1D 0x001D +0x1E 0x001E +0x1F 0x001F +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2A 0x002A +0x2B 0x002B +0x2C 0x002C +0x2D 0x002D +0x2E 0x002E +0x2F 0x002F +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3A 0x003A +0x3B 0x003B +0x3C 0x003C +0x3D 0x003D +0x3E 0x003E +0x3F 0x003F +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4A 0x004A +0x4B 0x004B +0x4C 0x004C +0x4D 0x004D +0x4E 0x004E +0x4F 0x004F +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5A 0x005A +0x5B 0x005B +0x5C 0x005C +0x5D 0x005D +0x5E 0x005E +0x5F 0x005F +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6A 0x006A +0x6B 0x006B +0x6C 0x006C +0x6D 0x006D +0x6E 0x006E +0x6F 0x006F +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7A 0x007A +0x7B 0x007B +0x7C 0x007C +0x7D 0x007D +0x7E 0x007E +0x7F 0x007F diff --git a/tests/02utf-8.t b/tests/02utf-8.t new file mode 100644 index 0000000..16a7fc2 --- /dev/null +++ b/tests/02utf-8.t @@ -0,0 +1,124 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +BEGIN { + plan tests => 5; +} + +use Locale::Recode; + +sub int2utf8; + +my $codes = {}; +foreach (0 .. 0xcfff + # 0 .. 0x11_000, + # 0x10_000 .. 0x11_000, + # 0x200_000 .. 0x201_000, # :-( # Not supported by Perl 5.6 + # 0x4_000_000 .. 0x4_001_000, # :-( # Not supported by Perl 5.6 + ) { + $codes->{$_} = int2utf8 $_; +} + +my $cd_int = Locale::Recode->new (from => 'UTF-8', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'UTF-8'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($ucs4, $outbuf) = each %$codes) { + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs4) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert from internal representation. +my $result_rev = 1; +if (1) { + # FIXME: This test only succeeds with use bytes in Perl >= 5.8.0. + # However, this will fail with Perl <= Perl 5.6.0. :-( + # FIXME: Is it really fixed now? +while (my ($ucs4, $code) = each %$codes) { + my $outbuf = [ $ucs4 ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code eq $outbuf) { + $result_rev = 0; + last; + } +} +} +ok $result_rev; + +# Check handling of unknown characters. This assumes that the +# character set is a subset of US-ASCII. +my $test_string1 = "\xffSupergirl\xff"; +$cd_rev = Locale::Recode->new (from => 'ASCII', + to => 'UTF-8', + ); +$result_rev = $cd_rev->recode ($test_string1); +ok $result_rev && $test_string1 eq "�Supergirl�"; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +# Local Variables: +# mode: perl +# perl-indent-level: 4 +# perl-continued-statement-offset: 4 +# perl-continued-brace-offset: 0 +# perl-brace-offset: -4 +# perl-brace-imaginary-offset: 0 +# perl-label-offset: -4 +# cperl-indent-level: 4 +# cperl-continued-statement-offset: 2 +# tab-width: 4 +# End: + diff --git a/tests/02viscii.t b/tests/02viscii.t new file mode 100644 index 0000000..e593740 --- /dev/null +++ b/tests/02viscii.t @@ -0,0 +1,399 @@ +#! /usr/local/bin/perl -w + +# vim: tabstop=4 +# vim: syntax=perl + +use strict; + +use Test; + +BEGIN { + plan tests => 7; +} + +use Locale::Recode; + +sub int2utf8; + +my $local2ucs = {}; +my $ucs2local = {}; + +while () { + my ($code, $ucs, undef) = map { oct $_ } split /\s+/, $_; + $local2ucs->{$code} = $ucs; + $ucs2local->{$ucs} = $code unless $ucs == 0xfffd; +} + +my $cd_int = Locale::Recode->new (from => 'VISCII', + to => 'INTERNAL'); +ok !$cd_int->getError; + +my $cd_utf8 = Locale::Recode->new (from => 'VISCII', + to => 'UTF-8'); +ok !$cd_utf8->getError; + +my $cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'VISCII'); +ok !$cd_rev->getError; + +# Convert into internal representation. +my $result_int = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_int->recode ($outbuf); + unless ($result && $outbuf->[0] == $ucs) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Convert to UTF-8. +my $result_utf8 = 1; +while (my ($code, $ucs) = each %$local2ucs) { + my $outbuf = chr $code; + my $result = $cd_utf8->recode ($outbuf); + unless ($result && $outbuf eq int2utf8 $ucs) { + $result_utf8 = 0; + last; + } +} +ok $result_utf8; + +# Convert from internal representation. +my $result_rev = 1; +while (my ($ucs, $code) = each %$ucs2local) { + my $outbuf = [ $ucs ]; + my $result = $cd_rev->recode ($outbuf); + unless ($result && $code == ord $outbuf) { + $result_int = 0; + last; + } +} +ok $result_int; + +# Check handling of unknown characters. +my $test_string1 = [ unpack 'c*', ' Supergirl ' ]; +$test_string1->[0] = 0xad0be; +$test_string1->[-1] = 0xad0be; +my $test_string2 = [ unpack 'c*', 'Supergirl' ]; + +my $unknown = "\x3f"; # Unknown character! + +$cd_rev = Locale::Recode->new (from => 'INTERNAL', + to => 'VISCII', + ) +&& $cd_rev->recode ($test_string1) +&& $cd_rev->recode ($test_string2) +&& ($test_string2 = $unknown . $test_string2 . $unknown); + +ok $test_string1 eq $test_string2; + +sub int2utf8 +{ + my $ucs4 = shift; + + if ($ucs4 <= 0x7f) { + return chr $ucs4; + } elsif ($ucs4 <= 0x7ff) { + return pack ("C2", + (0xc0 | (($ucs4 >> 6) & 0x1f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0xffff) { + return pack ("C3", + (0xe0 | (($ucs4 >> 12) & 0xf)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x1fffff) { + return pack ("C4", + (0xf0 | (($ucs4 >> 18) & 0x7)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } elsif ($ucs4 <= 0x3ffffff) { + return pack ("C5", + (0xf0 | (($ucs4 >> 24) & 0x3)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } else { + return pack ("C6", + (0xf0 | (($ucs4 >> 30) & 0x3)), + (0x80 | (($ucs4 >> 24) & 0x1)), + (0x80 | (($ucs4 >> 18) & 0x3f)), + (0x80 | (($ucs4 >> 12) & 0x3f)), + (0x80 | (($ucs4 >> 6) & 0x3f)), + (0x80 | ($ucs4 & 0x3f))); + } +} + +#Local Variables: +#mode: perl +#perl-indent-level: 4 +#perl-continued-statement-offset: 4 +#perl-continued-brace-offset: 0 +#perl-brace-offset: -4 +#perl-brace-imaginary-offset: 0 +#perl-label-offset: -4 +#tab-width: 4 +#End: + + +__DATA__ +0x00 0x0000 +0x01 0x0001 +0x02 0x1eb2 +0x03 0x0003 +0x04 0x0004 +0x05 0x1eb4 +0x06 0x1eaa +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0a 0x000a +0x0b 0x000b +0x0c 0x000c +0x0d 0x000d +0x0e 0x000e +0x0f 0x000f +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x1ef6 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x1ef8 +0x1a 0x001a +0x1b 0x001b +0x1c 0x001c +0x1d 0x001d +0x1e 0x1ef4 +0x1f 0x001f +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2a 0x002a +0x2b 0x002b +0x2c 0x002c +0x2d 0x002d +0x2e 0x002e +0x2f 0x002f +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3a 0x003a +0x3b 0x003b +0x3c 0x003c +0x3d 0x003d +0x3e 0x003e +0x3f 0x003f +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4a 0x004a +0x4b 0x004b +0x4c 0x004c +0x4d 0x004d +0x4e 0x004e +0x4f 0x004f +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5a 0x005a +0x5b 0x005b +0x5c 0x005c +0x5d 0x005d +0x5e 0x005e +0x5f 0x005f +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6a 0x006a +0x6b 0x006b +0x6c 0x006c +0x6d 0x006d +0x6e 0x006e +0x6f 0x006f +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7a 0x007a +0x7b 0x007b +0x7c 0x007c +0x7d 0x007d +0x7e 0x007e +0x7f 0x007f +0x80 0x1ea0 +0x81 0x1eae +0x82 0x1eb0 +0x83 0x1eb6 +0x84 0x1ea4 +0x85 0x1ea6 +0x86 0x1ea8 +0x87 0x1eac +0x88 0x1ebc +0x89 0x1eb8 +0x8a 0x1ebe +0x8b 0x1ec0 +0x8c 0x1ec2 +0x8d 0x1ec4 +0x8e 0x1ec6 +0x8f 0x1ed0 +0x90 0x1ed2 +0x91 0x1ed4 +0x92 0x1ed6 +0x93 0x1ed8 +0x94 0x1ee2 +0x95 0x1eda +0x96 0x1edc +0x97 0x1ede +0x98 0x1eca +0x99 0x1ece +0x9a 0x1ecc +0x9b 0x1ec8 +0x9c 0x1ee6 +0x9d 0x0168 +0x9e 0x1ee4 +0x9f 0x1ef2 +0xa0 0x00d5 +0xa1 0x1eaf +0xa2 0x1eb1 +0xa3 0x1eb7 +0xa4 0x1ea5 +0xa5 0x1ea7 +0xa6 0x1ea9 +0xa7 0x1ead +0xa8 0x1ebd +0xa9 0x1eb9 +0xaa 0x1ebf +0xab 0x1ec1 +0xac 0x1ec3 +0xad 0x1ec5 +0xae 0x1ec7 +0xaf 0x1ed1 +0xb0 0x1ed3 +0xb1 0x1ed5 +0xb2 0x1ed7 +0xb3 0x1ee0 +0xb4 0x01a0 +0xb5 0x1ed9 +0xb6 0x1edd +0xb7 0x1edf +0xb8 0x1ecb +0xb9 0x1ef0 +0xba 0x1ee8 +0xbb 0x1eea +0xbc 0x1eec +0xbd 0x01a1 +0xbe 0x1edb +0xbf 0x01af +0xc0 0x00c0 +0xc1 0x00c1 +0xc2 0x00c2 +0xc3 0x00c3 +0xc4 0x1ea2 +0xc5 0x0102 +0xc6 0x1eb3 +0xc7 0x1eb5 +0xc8 0x00c8 +0xc9 0x00c9 +0xca 0x00ca +0xcb 0x1eba +0xcc 0x00cc +0xcd 0x00cd +0xce 0x0128 +0xcf 0x1ef3 +0xd0 0x0110 +0xd1 0x1ee9 +0xd2 0x00d2 +0xd3 0x00d3 +0xd4 0x00d4 +0xd5 0x1ea1 +0xd6 0x1ef7 +0xd7 0x1eeb +0xd8 0x1eed +0xd9 0x00d9 +0xda 0x00da +0xdb 0x1ef9 +0xdc 0x1ef5 +0xdd 0x00dd +0xde 0x1ee1 +0xdf 0x01b0 +0xe0 0x00e0 +0xe1 0x00e1 +0xe2 0x00e2 +0xe3 0x00e3 +0xe4 0x1ea3 +0xe5 0x0103 +0xe6 0x1eef +0xe7 0x1eab +0xe8 0x00e8 +0xe9 0x00e9 +0xea 0x00ea +0xeb 0x1ebb +0xec 0x00ec +0xed 0x00ed +0xee 0x0129 +0xef 0x1ec9 +0xf0 0x0111 +0xf1 0x1ef1 +0xf2 0x00f2 +0xf3 0x00f3 +0xf4 0x00f4 +0xf5 0x00f5 +0xf6 0x1ecf +0xf7 0x1ecd +0xf8 0x1ee5 +0xf9 0x00f9 +0xfa 0x00fa +0xfb 0x0169 +0xfc 0x1ee7 +0xfd 0x00fd +0xfe 0x1ee3 +0xff 0x1eee diff --git a/tests/03_tester_david_pp.t b/tests/03_tester_david_pp.t new file mode 100644 index 0000000..b2c21b7 --- /dev/null +++ b/tests/03_tester_david_pp.t @@ -0,0 +1,86 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 6; + +use Locale::Messages qw (LC_MESSAGES bindtextdomain textdomain dcgettext dgettext gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +# Normal lookup. +skip $missing_locale, dcgettext (existing => 'View', LC_MESSAGES), 'Anzeigen'; + +# Can we retrieve a translation with the gettext glue? +skip $missing_locale, dcgettext (existing => "Which folder would you like to view?\004View", + LC_MESSAGES), 'Ansicht'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03_tester_david_xs.t b/tests/03_tester_david_xs.t new file mode 100644 index 0000000..b2c21b7 --- /dev/null +++ b/tests/03_tester_david_xs.t @@ -0,0 +1,86 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 6; + +use Locale::Messages qw (LC_MESSAGES bindtextdomain textdomain dcgettext dgettext gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +# Normal lookup. +skip $missing_locale, dcgettext (existing => 'View', LC_MESSAGES), 'Anzeigen'; + +# Can we retrieve a translation with the gettext glue? +skip $missing_locale, dcgettext (existing => "Which folder would you like to view?\004View", + LC_MESSAGES), 'Ansicht'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03bind_textdomain_codeset_pp.t b/tests/03bind_textdomain_codeset_pp.t new file mode 100644 index 0000000..ee22a9f --- /dev/null +++ b/tests/03bind_textdomain_codeset_pp.t @@ -0,0 +1,104 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 14; + +use Locale::Messages qw (bindtextdomain textdomain bind_textdomain_codeset + gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir) eq File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $textdomain, $bound_domain; + +my $bound_codeset = bind_textdomain_codeset $textdomain => 'ISO-8859-1'; + +ok defined $bound_codeset; +ok $bound_codeset, 'ISO-8859-1'; + +skip $missing_locale, gettext ('January'), 'J�nner'; +skip $missing_locale, gettext ('March'), 'M�rz'; + +# This will cause GNU gettext to re-load our catalog. +$bound_dir = bindtextdomain $textdomain => $locale_dir . '/../LocaleData'; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), + File::Spec->catdir ("$locale_dir/../LocaleData")); + +$bound_codeset = bind_textdomain_codeset $textdomain => 'UTF-8'; + +ok defined $bound_codeset; +ok uc $bound_codeset, 'UTF-8'; + +skip $missing_locale, gettext ('January'), 'Jänner'; +skip $missing_locale, gettext ('March'), 'März'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03bind_textdomain_codeset_xs.t b/tests/03bind_textdomain_codeset_xs.t new file mode 100644 index 0000000..ee22a9f --- /dev/null +++ b/tests/03bind_textdomain_codeset_xs.t @@ -0,0 +1,104 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 14; + +use Locale::Messages qw (bindtextdomain textdomain bind_textdomain_codeset + gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir) eq File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $textdomain, $bound_domain; + +my $bound_codeset = bind_textdomain_codeset $textdomain => 'ISO-8859-1'; + +ok defined $bound_codeset; +ok $bound_codeset, 'ISO-8859-1'; + +skip $missing_locale, gettext ('January'), 'J�nner'; +skip $missing_locale, gettext ('March'), 'M�rz'; + +# This will cause GNU gettext to re-load our catalog. +$bound_dir = bindtextdomain $textdomain => $locale_dir . '/../LocaleData'; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), + File::Spec->catdir ("$locale_dir/../LocaleData")); + +$bound_codeset = bind_textdomain_codeset $textdomain => 'UTF-8'; + +ok defined $bound_codeset; +ok uc $bound_codeset, 'UTF-8'; + +skip $missing_locale, gettext ('January'), 'Jänner'; +skip $missing_locale, gettext ('March'), 'März'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03bind_textdomain_filter_pp.t b/tests/03bind_textdomain_filter_pp.t new file mode 100644 index 0000000..4c12c60 --- /dev/null +++ b/tests/03bind_textdomain_filter_pp.t @@ -0,0 +1,88 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 7; + +use Locale::Messages qw (LC_MESSAGES textdomain bind_textdomain_filter + gettext dgettext dcgettext + ngettext dngettext dcngettext); + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +textdomain 'bogus'; + +my $gettext = gettext ('foobar'); +my $dgettext = dgettext (bogus => 'foobar'); +my $dcgettext = dcgettext (bogus => 'foobar', LC_MESSAGES); +my $ngettext = ngettext ('foobar', 'barbaz', 1); +my $dngettext = dngettext (bogus => 'foobar', 'barbaz', 1); +my $dcngettext = dcngettext (bogus => 'foobar', 'barbaz', 1, LC_MESSAGES); + +package MyPackage; + +use strict; + +sub new { + bless {}, shift; +} + +sub filterMethod { + my ($self, $string) = @_; + + return 'prefix - ' . $string; +}; + +package main; + +sub wrapper { + my ($string, $obj) = @_; + + $obj->filterMethod ($string); +} + +my $obj = MyPackage->new; +ok (bind_textdomain_filter ('bogus', \&wrapper, $obj)); + +my $prefix = 'prefix - '; +ok "$prefix$gettext", gettext ('foobar'); +ok "$prefix$dgettext", dgettext (bogus => 'foobar'); +ok "$prefix$dcgettext", dcgettext (bogus => 'foobar', LC_MESSAGES); +ok "$prefix$ngettext", ngettext ('foobar', 'barbaz', 1); +ok "$prefix$dngettext", dngettext (bogus => 'foobar', 'barbaz', 1); +ok "$prefix$dcngettext", + dcngettext (bogus => 'foobar', 'barbaz', 1, LC_MESSAGES); + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03bind_textdomain_filter_xs.t b/tests/03bind_textdomain_filter_xs.t new file mode 100644 index 0000000..4c12c60 --- /dev/null +++ b/tests/03bind_textdomain_filter_xs.t @@ -0,0 +1,88 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 7; + +use Locale::Messages qw (LC_MESSAGES textdomain bind_textdomain_filter + gettext dgettext dcgettext + ngettext dngettext dcngettext); + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +textdomain 'bogus'; + +my $gettext = gettext ('foobar'); +my $dgettext = dgettext (bogus => 'foobar'); +my $dcgettext = dcgettext (bogus => 'foobar', LC_MESSAGES); +my $ngettext = ngettext ('foobar', 'barbaz', 1); +my $dngettext = dngettext (bogus => 'foobar', 'barbaz', 1); +my $dcngettext = dcngettext (bogus => 'foobar', 'barbaz', 1, LC_MESSAGES); + +package MyPackage; + +use strict; + +sub new { + bless {}, shift; +} + +sub filterMethod { + my ($self, $string) = @_; + + return 'prefix - ' . $string; +}; + +package main; + +sub wrapper { + my ($string, $obj) = @_; + + $obj->filterMethod ($string); +} + +my $obj = MyPackage->new; +ok (bind_textdomain_filter ('bogus', \&wrapper, $obj)); + +my $prefix = 'prefix - '; +ok "$prefix$gettext", gettext ('foobar'); +ok "$prefix$dgettext", dgettext (bogus => 'foobar'); +ok "$prefix$dcgettext", dcgettext (bogus => 'foobar', LC_MESSAGES); +ok "$prefix$ngettext", ngettext ('foobar', 'barbaz', 1); +ok "$prefix$dngettext", dngettext (bogus => 'foobar', 'barbaz', 1); +ok "$prefix$dcngettext", + dcngettext (bogus => 'foobar', 'barbaz', 1, LC_MESSAGES); + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03bindtextdomain_pp.t b/tests/03bindtextdomain_pp.t new file mode 100644 index 0000000..03aeceb --- /dev/null +++ b/tests/03bindtextdomain_pp.t @@ -0,0 +1,67 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 12; + +use Locale::Messages qw (bindtextdomain); + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $bound_domain = bindtextdomain 'existing'; +ok defined $bound_domain; +ok length $bound_domain; + +$bound_domain = bindtextdomain 'existing', '.'; +ok defined $bound_domain; +ok $bound_domain, '.'; + +$bound_domain = bindtextdomain 'existing'; +ok defined $bound_domain; +ok $bound_domain, '.'; + +$bound_domain = bindtextdomain 'not_existing'; +ok defined $bound_domain; +ok length $bound_domain; + +$bound_domain = bindtextdomain 'not_existing', '.'; +ok defined $bound_domain; +ok $bound_domain, '.'; + +$bound_domain = bindtextdomain 'not_existing'; +ok defined $bound_domain; +ok $bound_domain, '.'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03bindtextdomain_xs.t b/tests/03bindtextdomain_xs.t new file mode 100644 index 0000000..03aeceb --- /dev/null +++ b/tests/03bindtextdomain_xs.t @@ -0,0 +1,67 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 12; + +use Locale::Messages qw (bindtextdomain); + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $bound_domain = bindtextdomain 'existing'; +ok defined $bound_domain; +ok length $bound_domain; + +$bound_domain = bindtextdomain 'existing', '.'; +ok defined $bound_domain; +ok $bound_domain, '.'; + +$bound_domain = bindtextdomain 'existing'; +ok defined $bound_domain; +ok $bound_domain, '.'; + +$bound_domain = bindtextdomain 'not_existing'; +ok defined $bound_domain; +ok length $bound_domain; + +$bound_domain = bindtextdomain 'not_existing', '.'; +ok defined $bound_domain; +ok $bound_domain, '.'; + +$bound_domain = bindtextdomain 'not_existing'; +ok defined $bound_domain; +ok $bound_domain, '.'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03dcgettext_pp.t b/tests/03dcgettext_pp.t new file mode 100644 index 0000000..58caab5 --- /dev/null +++ b/tests/03dcgettext_pp.t @@ -0,0 +1,86 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 11; + +use Locale::Messages qw (bindtextdomain dcgettext LC_MESSAGES); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +my $bound_dir = bindtextdomain existing => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +$bound_dir = bindtextdomain additional => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +skip $missing_locale, 'Dezember', dcgettext (existing => 'December', LC_MESSAGES); +ok 'September', dcgettext (existing => 'September', LC_MESSAGES); +ok 'Not translated', dcgettext (existing => 'Not translated', LC_MESSAGES); +skip $missing_locale, 'J�nner', dcgettext (existing => 'January', LC_MESSAGES); + +skip $missing_locale, 'Montag', dcgettext (additional => 'Monday', LC_MESSAGES); +ok 'Not translated', dcgettext (additional => 'Not translated', LC_MESSAGES); +skip $missing_locale, + dcgettext (additional => 'Saturday', LC_MESSAGES), 'Sonnabend'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03dcgettext_xs.t b/tests/03dcgettext_xs.t new file mode 100644 index 0000000..58caab5 --- /dev/null +++ b/tests/03dcgettext_xs.t @@ -0,0 +1,86 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 11; + +use Locale::Messages qw (bindtextdomain dcgettext LC_MESSAGES); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +my $bound_dir = bindtextdomain existing => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +$bound_dir = bindtextdomain additional => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +skip $missing_locale, 'Dezember', dcgettext (existing => 'December', LC_MESSAGES); +ok 'September', dcgettext (existing => 'September', LC_MESSAGES); +ok 'Not translated', dcgettext (existing => 'Not translated', LC_MESSAGES); +skip $missing_locale, 'J�nner', dcgettext (existing => 'January', LC_MESSAGES); + +skip $missing_locale, 'Montag', dcgettext (additional => 'Monday', LC_MESSAGES); +ok 'Not translated', dcgettext (additional => 'Not translated', LC_MESSAGES); +skip $missing_locale, + dcgettext (additional => 'Saturday', LC_MESSAGES), 'Sonnabend'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03dcngettext_pp.t b/tests/03dcngettext_pp.t new file mode 100644 index 0000000..b71bd57 --- /dev/null +++ b/tests/03dcngettext_pp.t @@ -0,0 +1,139 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 85; + +use Locale::Messages qw (bindtextdomain dcngettext LC_MESSAGES); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; + +my @strings = qw (Singular Plural); +for (0 .. 9) { + my $translation = dcngettext (not_here => $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dcngettext (existing => $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +for (0 .. 9) { + my $translation = dcngettext (existing => $strings[0], $strings[1], $_, LC_MESSAGES); + skip $missing_locale, $translation, $_ == 1 ? 'Einzahl' : 'Mehrzahl'; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain additional => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); + +for (0 .. 9) { + my $translation = dcngettext (additional => $strings[0], $strings[1], $_, LC_MESSAGES); + ok $translation, $_ == 1 ? 'Singular' : 'Plural'; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale; + +for (0 .. 40) { + my $translation = dcngettext (additional => $strings[0], $strings[1], $_, LC_MESSAGES); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus $plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03dcngettext_xs.t b/tests/03dcngettext_xs.t new file mode 100644 index 0000000..b71bd57 --- /dev/null +++ b/tests/03dcngettext_xs.t @@ -0,0 +1,139 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 85; + +use Locale::Messages qw (bindtextdomain dcngettext LC_MESSAGES); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; + +my @strings = qw (Singular Plural); +for (0 .. 9) { + my $translation = dcngettext (not_here => $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dcngettext (existing => $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +for (0 .. 9) { + my $translation = dcngettext (existing => $strings[0], $strings[1], $_, LC_MESSAGES); + skip $missing_locale, $translation, $_ == 1 ? 'Einzahl' : 'Mehrzahl'; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain additional => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); + +for (0 .. 9) { + my $translation = dcngettext (additional => $strings[0], $strings[1], $_, LC_MESSAGES); + ok $translation, $_ == 1 ? 'Singular' : 'Plural'; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale; + +for (0 .. 40) { + my $translation = dcngettext (additional => $strings[0], $strings[1], $_, LC_MESSAGES); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus $plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03dcnpgettext_pp.t b/tests/03dcnpgettext_pp.t new file mode 100644 index 0000000..fc87a13 --- /dev/null +++ b/tests/03dcnpgettext_pp.t @@ -0,0 +1,143 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 95; + +use Locale::Messages qw (bindtextdomain dcnpgettext LC_MESSAGES); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; + +# make sure it works with distinct key (where context doesn't matter) +my $context3 = "Context here (3)"; +my @strings3 = ("Singular 3", "Plural 3"); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = dcnpgettext (not_here => $context3, $strings3[0], $strings3[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular 3' : 'Plural 3'; + ok $translation, $expected; +} + +# not try a msgid that matches existing one +my $context = "Context here (2)"; +my @strings = qw (Singular Plural); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = dcnpgettext (not_here => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dcnpgettext (existing => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_AT missing'; + +for (0 .. 9) { + my $translation = dcnpgettext (existing => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Einzahl 2' : 'Mehrzahl 2'; + skip $missing_locale, $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain additional => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dcnpgettext (additional => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +for (0 .. 40) { + my $translation = dcnpgettext (additional => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus 2:$plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03dcnpgettext_xs.t b/tests/03dcnpgettext_xs.t new file mode 100644 index 0000000..fc87a13 --- /dev/null +++ b/tests/03dcnpgettext_xs.t @@ -0,0 +1,143 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 95; + +use Locale::Messages qw (bindtextdomain dcnpgettext LC_MESSAGES); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; + +# make sure it works with distinct key (where context doesn't matter) +my $context3 = "Context here (3)"; +my @strings3 = ("Singular 3", "Plural 3"); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = dcnpgettext (not_here => $context3, $strings3[0], $strings3[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular 3' : 'Plural 3'; + ok $translation, $expected; +} + +# not try a msgid that matches existing one +my $context = "Context here (2)"; +my @strings = qw (Singular Plural); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = dcnpgettext (not_here => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dcnpgettext (existing => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_AT missing'; + +for (0 .. 9) { + my $translation = dcnpgettext (existing => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Einzahl 2' : 'Mehrzahl 2'; + skip $missing_locale, $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain additional => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dcnpgettext (additional => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +for (0 .. 40) { + my $translation = dcnpgettext (additional => $context, $strings[0], $strings[1], $_, LC_MESSAGES); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus 2:$plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03dcpgettext_pp.t b/tests/03dcpgettext_pp.t new file mode 100644 index 0000000..428ba5e --- /dev/null +++ b/tests/03dcpgettext_pp.t @@ -0,0 +1,85 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 10; + +use Locale::Messages qw (bindtextdomain dcgettext dcpgettext LC_MESSAGES); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^/\\]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $bound_dir = bindtextdomain existing => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); + +$bound_dir = bindtextdomain additional => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +# make sure dgettext and dpgettext return diff values +skip $missing_locale, 'Anzeigen', dcgettext (existing => 'View', LC_MESSAGES); +skip $missing_locale, 'Ansicht', dcpgettext (existing => 'Which folder would you like to view?','View', LC_MESSAGES); +skip $missing_locale, 'Not translated', dcpgettext (existing => 'none', 'Not translated', LC_MESSAGES); + +skip $missing_locale, 'Eine andere Ansicht mit Kontext', dcpgettext (additional => 'Context', 'Another View', LC_MESSAGES); +skip $missing_locale, 'Not translated', dcpgettext (additional => 'none', 'Not translated', LC_MESSAGES); +skip $missing_locale, 'Eine andere Ansicht mit Kontext', dcpgettext (additional => 'Context', 'Another View', LC_MESSAGES); + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03dcpgettext_xs.t b/tests/03dcpgettext_xs.t new file mode 100644 index 0000000..428ba5e --- /dev/null +++ b/tests/03dcpgettext_xs.t @@ -0,0 +1,85 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 10; + +use Locale::Messages qw (bindtextdomain dcgettext dcpgettext LC_MESSAGES); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^/\\]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $bound_dir = bindtextdomain existing => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); + +$bound_dir = bindtextdomain additional => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +# make sure dgettext and dpgettext return diff values +skip $missing_locale, 'Anzeigen', dcgettext (existing => 'View', LC_MESSAGES); +skip $missing_locale, 'Ansicht', dcpgettext (existing => 'Which folder would you like to view?','View', LC_MESSAGES); +skip $missing_locale, 'Not translated', dcpgettext (existing => 'none', 'Not translated', LC_MESSAGES); + +skip $missing_locale, 'Eine andere Ansicht mit Kontext', dcpgettext (additional => 'Context', 'Another View', LC_MESSAGES); +skip $missing_locale, 'Not translated', dcpgettext (additional => 'none', 'Not translated', LC_MESSAGES); +skip $missing_locale, 'Eine andere Ansicht mit Kontext', dcpgettext (additional => 'Context', 'Another View', LC_MESSAGES); + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03dgettext_pp.t b/tests/03dgettext_pp.t new file mode 100644 index 0000000..e841f4e --- /dev/null +++ b/tests/03dgettext_pp.t @@ -0,0 +1,85 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 11; + +use Locale::Messages qw (bindtextdomain dgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^/\\]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +my $bound_dir = bindtextdomain existing => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +$bound_dir = bindtextdomain additional => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +skip $missing_locale, 'Dezember', dgettext (existing => 'December'); +ok 'September', dgettext (existing => 'September'); +ok 'Not translated', dgettext (existing => 'Not translated'); +skip $missing_locale, 'J�nner', dgettext (existing => 'January'); + +skip $missing_locale, 'Montag', dgettext (additional => 'Monday'); +ok dgettext (additional => 'Not translated'), 'Not translated'; +skip $missing_locale, dgettext (additional => 'Saturday'), 'Sonnabend'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03dgettext_xs.t b/tests/03dgettext_xs.t new file mode 100644 index 0000000..e841f4e --- /dev/null +++ b/tests/03dgettext_xs.t @@ -0,0 +1,85 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 11; + +use Locale::Messages qw (bindtextdomain dgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^/\\]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +my $bound_dir = bindtextdomain existing => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +$bound_dir = bindtextdomain additional => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +skip $missing_locale, 'Dezember', dgettext (existing => 'December'); +ok 'September', dgettext (existing => 'September'); +ok 'Not translated', dgettext (existing => 'Not translated'); +skip $missing_locale, 'J�nner', dgettext (existing => 'January'); + +skip $missing_locale, 'Montag', dgettext (additional => 'Monday'); +ok dgettext (additional => 'Not translated'), 'Not translated'; +skip $missing_locale, dgettext (additional => 'Saturday'), 'Sonnabend'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03dngettext_pp.t b/tests/03dngettext_pp.t new file mode 100644 index 0000000..2b6d9f6 --- /dev/null +++ b/tests/03dngettext_pp.t @@ -0,0 +1,141 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 85; + +use Locale::Messages qw (bindtextdomain dngettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; + +my @strings = qw (Singular Plural); +for (0 .. 9) { + my $translation = dngettext (not_here => $strings[0], $strings[1], $_); + ok $translation, $_ == 1 ? 'Singular' : 'Plural'; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dngettext (existing => $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +for (0 .. 9) { + my $translation = dngettext (existing => $strings[0], $strings[1], $_); + skip $missing_locale, + $translation, $_ == 1 ? 'Einzahl' : 'Mehrzahl'; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain additional => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); + +for (0 .. 9) { + my $translation = dngettext (additional => $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale; + +for (0 .. 40) { + my $translation = dngettext (additional => $strings[0], $strings[1], $_); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus $plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03dngettext_xs.t b/tests/03dngettext_xs.t new file mode 100644 index 0000000..2b6d9f6 --- /dev/null +++ b/tests/03dngettext_xs.t @@ -0,0 +1,141 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 85; + +use Locale::Messages qw (bindtextdomain dngettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; + +my @strings = qw (Singular Plural); +for (0 .. 9) { + my $translation = dngettext (not_here => $strings[0], $strings[1], $_); + ok $translation, $_ == 1 ? 'Singular' : 'Plural'; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dngettext (existing => $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +for (0 .. 9) { + my $translation = dngettext (existing => $strings[0], $strings[1], $_); + skip $missing_locale, + $translation, $_ == 1 ? 'Einzahl' : 'Mehrzahl'; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain additional => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($locale_dir), File::Spec->catdir ($bound_dir)); + +for (0 .. 9) { + my $translation = dngettext (additional => $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale; + +for (0 .. 40) { + my $translation = dngettext (additional => $strings[0], $strings[1], $_); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus $plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03dnpgettext_pp.t b/tests/03dnpgettext_pp.t new file mode 100644 index 0000000..ba4d865 --- /dev/null +++ b/tests/03dnpgettext_pp.t @@ -0,0 +1,145 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 95; + +use Locale::Messages qw (bindtextdomain dnpgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; + +# make sure it works with distinct key (where context doesn't matter) +my $context3 = "Context here (3)"; +my @strings3 = ("Singular 3", "Plural 3"); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = dnpgettext (not_here => $context3, $strings3[0], $strings3[1], $_); + my $expected = $_ == 1 ? 'Singular 3' : 'Plural 3'; + ok $translation, $expected; +} + +# not try a msgid that matches existing one +my $context = "Context here (2)"; +my @strings = qw (Singular Plural); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = dnpgettext (not_here => $context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dnpgettext (existing => $context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_AT missing'; + +for (0 .. 9) { + my $translation = dnpgettext (existing => $context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Einzahl 2' : 'Mehrzahl 2'; + skip $missing_locale, $expected, $translation; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain additional => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dnpgettext (additional => $context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +for (0 .. 40) { + my $translation = dnpgettext (additional => $context, $strings[0], $strings[1], $_); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus 2:$plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03dnpgettext_xs.t b/tests/03dnpgettext_xs.t new file mode 100644 index 0000000..ba4d865 --- /dev/null +++ b/tests/03dnpgettext_xs.t @@ -0,0 +1,145 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 95; + +use Locale::Messages qw (bindtextdomain dnpgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; + +# make sure it works with distinct key (where context doesn't matter) +my $context3 = "Context here (3)"; +my @strings3 = ("Singular 3", "Plural 3"); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = dnpgettext (not_here => $context3, $strings3[0], $strings3[1], $_); + my $expected = $_ == 1 ? 'Singular 3' : 'Plural 3'; + ok $translation, $expected; +} + +# not try a msgid that matches existing one +my $context = "Context here (2)"; +my @strings = qw (Singular Plural); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = dnpgettext (not_here => $context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dnpgettext (existing => $context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_AT missing'; + +for (0 .. 9) { + my $translation = dnpgettext (existing => $context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Einzahl 2' : 'Mehrzahl 2'; + skip $missing_locale, $expected, $translation; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain additional => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +for (0 .. 9) { + my $translation = dnpgettext (additional => $context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +for (0 .. 40) { + my $translation = dnpgettext (additional => $context, $strings[0], $strings[1], $_); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus 2:$plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03dpgettext_pp.t b/tests/03dpgettext_pp.t new file mode 100644 index 0000000..2305631 --- /dev/null +++ b/tests/03dpgettext_pp.t @@ -0,0 +1,86 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 9; + +use Locale::Messages qw (bindtextdomain gettext dgettext dpgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^/\\]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +$bound_dir = bindtextdomain additional => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +# make sure dgettext and dpgettext return diff values +skip $missing_locale, dgettext (existing => 'View'), 'Anzeigen'; +skip $missing_locale, dpgettext (existing => 'Which folder would you like to view?', 'View'), 'Ansicht'; +skip $missing_locale, dpgettext (existing => 'none', 'Not translated'), 'Not translated'; + +skip $missing_locale, dpgettext (additional => 'Context', 'Another View'), 'Eine andere Ansicht mit Kontext'; +skip $missing_locale, dpgettext (additional => 'none', 'Not translated'), 'Not translated'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03dpgettext_xs.t b/tests/03dpgettext_xs.t new file mode 100644 index 0000000..2305631 --- /dev/null +++ b/tests/03dpgettext_xs.t @@ -0,0 +1,86 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 9; + +use Locale::Messages qw (bindtextdomain gettext dgettext dpgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^/\\]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain existing => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +$bound_dir = bindtextdomain additional => $locale_dir; +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +# make sure dgettext and dpgettext return diff values +skip $missing_locale, dgettext (existing => 'View'), 'Anzeigen'; +skip $missing_locale, dpgettext (existing => 'Which folder would you like to view?', 'View'), 'Ansicht'; +skip $missing_locale, dpgettext (existing => 'none', 'Not translated'), 'Not translated'; + +skip $missing_locale, dpgettext (additional => 'Context', 'Another View'), 'Eine andere Ansicht mit Kontext'; +skip $missing_locale, dpgettext (additional => 'none', 'Not translated'), 'Not translated'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03environment_pp.t b/tests/03environment_pp.t new file mode 100644 index 0000000..35fcd70 --- /dev/null +++ b/tests/03environment_pp.t @@ -0,0 +1,645 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 85; + +use Locale::Messages qw (nl_putenv bindtextdomain textdomain gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + + plan tests => NUM_TESTS; +} + +# Clean environment first. +foreach my $var (keys %ENV) { + if ('LC_' eq substr $var, 0, 3) { + nl_putenv "$var"; + } +} + +nl_putenv "LC_ALL=de_DE"; +nl_putenv "LC_MESSAGES=de_DE"; +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_DE missing'; +if (!$missing_locale && $0 =~ /_xs\.t$/) { + $missing_locale = $ENV{GNU_GETTEXT_COMPATIBILITY} ? + '' : 'compatibility tests not activated'; +} +Locale::Messages::setlocale (POSIX::LC_ALL() => 'C'); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03environment_xs.t b/tests/03environment_xs.t new file mode 100644 index 0000000..35fcd70 --- /dev/null +++ b/tests/03environment_xs.t @@ -0,0 +1,645 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 85; + +use Locale::Messages qw (nl_putenv bindtextdomain textdomain gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + + plan tests => NUM_TESTS; +} + +# Clean environment first. +foreach my $var (keys %ENV) { + if ('LC_' eq substr $var, 0, 3) { + nl_putenv "$var"; + } +} + +nl_putenv "LC_ALL=de_DE"; +nl_putenv "LC_MESSAGES=de_DE"; +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_DE missing'; +if (!$missing_locale && $0 =~ /_xs\.t$/) { + $missing_locale = $ENV{GNU_GETTEXT_COMPATIBILITY} ? + '' : 'compatibility tests not activated'; +} +Locale::Messages::setlocale (POSIX::LC_ALL() => 'C'); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=C'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=C'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=C'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=C'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'May'; + +nl_putenv 'LANGUAGE=de_DE'; +nl_putenv 'LANG=de_DE'; +nl_putenv 'LC_MESSAGES=de_DE'; +nl_putenv 'LC_ALL=de_DE'; +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('May'), 'Mai'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03gettext_dumb.t b/tests/03gettext_dumb.t new file mode 100644 index 0000000..5dd513c --- /dev/null +++ b/tests/03gettext_dumb.t @@ -0,0 +1,100 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 20; + +use Locale::Messages qw (bindtextdomain textdomain gettext nl_putenv); +use Locale::gettext_pp; +use POSIX; +use File::Spec; + +BEGIN { + my $selected = Locale::Messages->select_package ('gettext_dumb'); + if (!$selected || $selected ne 'gettext_dumb') { + print "1..1\nnot ok # Locale::gettext_dumb does not compile: $@!\n"; + exit 111; + } + plan tests => NUM_TESTS; +} + +ok Locale::gettext_dumb::LC_CTYPE(), Locale::gettext_pp::LC_CTYPE(); +ok Locale::gettext_dumb::LC_NUMERIC(), Locale::gettext_pp::LC_NUMERIC(); +ok Locale::gettext_dumb::LC_TIME(), Locale::gettext_pp::LC_TIME(); +ok Locale::gettext_dumb::LC_COLLATE(), Locale::gettext_pp::LC_COLLATE(); +ok Locale::gettext_dumb::LC_MONETARY(), Locale::gettext_pp::LC_MONETARY(); +ok Locale::gettext_dumb::LC_MESSAGES(), Locale::gettext_pp::LC_MESSAGES(); +ok Locale::gettext_dumb::LC_ALL(), Locale::gettext_pp::LC_ALL(); + +# Unset all environment variables and reset the locale to POSIX. +nl_putenv "MESSAGE_CATALOGS"; +nl_putenv "LANGUAGE"; +nl_putenv "LANG"; +nl_putenv "LC_ALL"; +nl_putenv "LC_MESSAGES"; + +Locale::Messages::setlocale (POSIX::LC_ALL(), "POSIX"); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +# No translation. +ok gettext "December", "December"; + +# Set LC_MESSAGES. +nl_putenv "LC_MESSAGES=xy_XY"; +ok gettext "December", "Dezember"; +ok gettext "February", "Feber"; + +# Set LANG. +nl_putenv "LANG=C"; +ok gettext "December", "December"; +nl_putenv "LANG=xy_XY"; +nl_putenv "LC_MESSAGES"; +ok gettext "December", "Dezember"; + +# Set LC_ALL. +nl_putenv "LC_ALL=C"; +ok gettext "December", "December"; +nl_putenv "LC_ALL=xy_XY"; +nl_putenv "LANG"; +ok gettext "December", "Dezember"; + +# Set LANGUAGE. +nl_putenv "LANGUAGE=C"; +ok gettext "December", "December"; +nl_putenv "LANGUAGE=xy_XY"; +nl_putenv "LC_ALL"; +ok gettext "December", "Dezember"; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03gettext_pp.t b/tests/03gettext_pp.t new file mode 100644 index 0000000..4e9f6b8 --- /dev/null +++ b/tests/03gettext_pp.t @@ -0,0 +1,91 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 8; + +use Locale::Messages qw (bindtextdomain textdomain gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +# Default case. +skip $missing_locale, gettext ('December'), 'Dezember'; + +# msgid eq msgstr. +ok gettext ('September'), 'September'; + +# Unknown. +ok gettext ('Not translated'), 'Not translated'; + +# Special translation for Austrian German. +skip $missing_locale, gettext ('January'), 'J�nner'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03gettext_xs.t b/tests/03gettext_xs.t new file mode 100644 index 0000000..4e9f6b8 --- /dev/null +++ b/tests/03gettext_xs.t @@ -0,0 +1,91 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 8; + +use Locale::Messages qw (bindtextdomain textdomain gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +# Default case. +skip $missing_locale, gettext ('December'), 'Dezember'; + +# msgid eq msgstr. +ok gettext ('September'), 'September'; + +# Unknown. +ok gettext ('Not translated'), 'Not translated'; + +# Special translation for Austrian German. +skip $missing_locale, gettext ('January'), 'J�nner'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03language_pp.t b/tests/03language_pp.t new file mode 100644 index 0000000..790ff66 --- /dev/null +++ b/tests/03language_pp.t @@ -0,0 +1,106 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 8; + +use Locale::Messages qw (bindtextdomain textdomain gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + + plan tests => NUM_TESTS; +} + +# Clean environment first. +foreach my $var (keys %ENV) { + if ('LC_' eq substr $var, 0, 3) { + Locale::Messages::nl_putenv ("$var"); + } +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +# Actually both de_AT and de are required. We assume here that +# de will be installed, too, if de_AT is. This test does not +# use Locale::Util::set_locale() for setting the locale, and +# that is on purpose. +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_AT missing'; +Locale::Messages::setlocale (POSIX::LC_ALL() => 'C'); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANG=whatever"); +Locale::Messages::nl_putenv ("LC_ALL=de_DE"); +Locale::Messages::nl_putenv ("LC_MESSAGES=whatever"); +Locale::Messages::nl_putenv ("LANGUAGE=ab_CD:ef_GH:de_AT:de"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +# Austrian German has precedence. +skip $missing_locale, gettext ('January'), 'J�nner'; +my $translation = gettext ('January'); + +Locale::Messages::nl_putenv ("LANGUAGE=ab_CD:ef_GH:de:de_AT"); +skip $missing_locale, gettext ('February'), 'Februar'; # not 'Feber'! + +# Check that LC_ALL works. +Locale::Messages::nl_putenv ("LANGUAGE"); +Locale::Messages::nl_putenv ("LC_ALL=de_DE.utf-8"); +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('February'), 'Februar'; + +# But LANGUAGE has precedence. +Locale::Messages::nl_putenv ("LANGUAGE=de_AT.utf-8"); +Locale::Messages::nl_putenv ("LC_ALL=de_DE.utf-8"); +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('February'), 'Feber'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03language_xs.t b/tests/03language_xs.t new file mode 100644 index 0000000..790ff66 --- /dev/null +++ b/tests/03language_xs.t @@ -0,0 +1,106 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 8; + +use Locale::Messages qw (bindtextdomain textdomain gettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + + plan tests => NUM_TESTS; +} + +# Clean environment first. +foreach my $var (keys %ENV) { + if ('LC_' eq substr $var, 0, 3) { + Locale::Messages::nl_putenv ("$var"); + } +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +# Actually both de_AT and de are required. We assume here that +# de will be installed, too, if de_AT is. This test does not +# use Locale::Util::set_locale() for setting the locale, and +# that is on purpose. +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_AT missing'; +Locale::Messages::setlocale (POSIX::LC_ALL() => 'C'); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANG=whatever"); +Locale::Messages::nl_putenv ("LC_ALL=de_DE"); +Locale::Messages::nl_putenv ("LC_MESSAGES=whatever"); +Locale::Messages::nl_putenv ("LANGUAGE=ab_CD:ef_GH:de_AT:de"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +# Austrian German has precedence. +skip $missing_locale, gettext ('January'), 'J�nner'; +my $translation = gettext ('January'); + +Locale::Messages::nl_putenv ("LANGUAGE=ab_CD:ef_GH:de:de_AT"); +skip $missing_locale, gettext ('February'), 'Februar'; # not 'Feber'! + +# Check that LC_ALL works. +Locale::Messages::nl_putenv ("LANGUAGE"); +Locale::Messages::nl_putenv ("LC_ALL=de_DE.utf-8"); +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('February'), 'Februar'; + +# But LANGUAGE has precedence. +Locale::Messages::nl_putenv ("LANGUAGE=de_AT.utf-8"); +Locale::Messages::nl_putenv ("LC_ALL=de_DE.utf-8"); +Locale::Messages::setlocale (POSIX::LC_ALL(), ''); +skip $missing_locale, gettext ('February'), 'Feber'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03ngettext_pp.t b/tests/03ngettext_pp.t new file mode 100644 index 0000000..24ed12e --- /dev/null +++ b/tests/03ngettext_pp.t @@ -0,0 +1,155 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 88; + +use Locale::Messages qw (bindtextdomain textdomain ngettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; +textdomain 'not_here'; + +my @strings = qw (Singular Plural); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = ngettext ($strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain && $textdomain eq $bound_domain; + +for (0 .. 9) { + my $translation = ngettext ($strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +for (0 .. 9) { + my $translation = ngettext ($strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Einzahl' : 'Mehrzahl'; + skip $missing_locale, $translation, $expected; +} + +$textdomain = 'additional'; +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +$bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +for (0 .. 9) { + my $translation = ngettext ($strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale; + +for (0 .. 40) { + my $translation = ngettext ($strings[0], $strings[1], $_); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus $plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03ngettext_xs.t b/tests/03ngettext_xs.t new file mode 100644 index 0000000..24ed12e --- /dev/null +++ b/tests/03ngettext_xs.t @@ -0,0 +1,155 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 88; + +use Locale::Messages qw (bindtextdomain textdomain ngettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; +textdomain 'not_here'; + +my @strings = qw (Singular Plural); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = ngettext ($strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($locale_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain && $textdomain eq $bound_domain; + +for (0 .. 9) { + my $translation = ngettext ($strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +for (0 .. 9) { + my $translation = ngettext ($strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Einzahl' : 'Mehrzahl'; + skip $missing_locale, $translation, $expected; +} + +$textdomain = 'additional'; +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +$bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +for (0 .. 9) { + my $translation = ngettext ($strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => $setlocale) unless $missing_locale; + +for (0 .. 40) { + my $translation = ngettext ($strings[0], $strings[1], $_); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus $plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03npgettext_pp.t b/tests/03npgettext_pp.t new file mode 100644 index 0000000..7ff7c05 --- /dev/null +++ b/tests/03npgettext_pp.t @@ -0,0 +1,157 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 109; + +use Locale::Messages qw (bindtextdomain textdomain npgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; +textdomain 'not_here'; + +# make sure it works with distinct key (where context doesn't matter) +my $context3 = "Context here (3)"; +my @strings3 = ("Singular 3", "Plural 3"); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = npgettext ($context3, $strings3[0], $strings3[1], $_); + my $expected = $_ == 1 ? 'Singular 3' : 'Plural 3'; + ok $translation, $expected; +} + +# not try a msgid that matches existing one +my $context = "Context here (2)"; +my @strings = qw (Singular Plural); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +for (0 .. 9) { + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_AT missing'; + +for (0 .. 9) { + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Einzahl 2' : 'Mehrzahl 2'; + skip skip $missing_locale, $translation, $expected; +} + +$textdomain = 'additional'; +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +$bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +for (0 .. 9) { + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +for (0 .. 40) { + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus 2:$plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03npgettext_xs.t b/tests/03npgettext_xs.t new file mode 100644 index 0000000..7ff7c05 --- /dev/null +++ b/tests/03npgettext_xs.t @@ -0,0 +1,157 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 109; + +use Locale::Messages qw (bindtextdomain textdomain npgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +bindtextdomain not_here => $locale_dir; +textdomain 'not_here'; + +# make sure it works with distinct key (where context doesn't matter) +my $context3 = "Context here (3)"; +my @strings3 = ("Singular 3", "Plural 3"); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = npgettext ($context3, $strings3[0], $strings3[1], $_); + my $expected = $_ == 1 ? 'Singular 3' : 'Plural 3'; + ok $translation, $expected; +} + +# not try a msgid that matches existing one +my $context = "Context here (2)"; +my @strings = qw (Singular Plural); +for (0 .. 9) { + # Prototype checking fails here if you pass the list @strings. + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +for (0 .. 9) { + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_AT missing'; + +for (0 .. 9) { + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Einzahl 2' : 'Mehrzahl 2'; + skip skip $missing_locale, $translation, $expected; +} + +$textdomain = 'additional'; +Locale::Messages::nl_putenv ("LANGUAGE=C"); +Locale::Messages::nl_putenv ("LC_ALL=C"); +Locale::Messages::nl_putenv ("LANG=C"); +Locale::Messages::nl_putenv ("LC_MESSAGES=C"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +$bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +$bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +for (0 .. 9) { + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $expected = $_ == 1 ? 'Singular' : 'Plural'; + ok $translation, $expected; +} + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +Locale::Messages::setlocale (POSIX::LC_ALL() => ''); + +for (0 .. 40) { + my $translation = npgettext ($context, $strings[0], $strings[1], $_); + my $plural = ($_ == 1 ? 0 : + $_ % 10 == 2 ? 1 : + $_ % 10 == 3 || $_ %10 == 4 ? 2 : 3); + skip $missing_locale, $translation, "Numerus 2:$plural"; +} + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: + diff --git a/tests/03pgettext_pp.t b/tests/03pgettext_pp.t new file mode 100644 index 0000000..7d758ec --- /dev/null +++ b/tests/03pgettext_pp.t @@ -0,0 +1,91 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 8; + +use Locale::Messages qw (bindtextdomain textdomain gettext pgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +# Default case. +skip $missing_locale, gettext ('View'), 'Anzeigen'; + +# Default context case. +skip $missing_locale, pgettext ('Which folder would you like to view?','View'), 'Ansicht'; + +# msgid eq msgstr. +skip $missing_locale, pgettext ('Which folder would you like to view? (2)','View'), 'View 2'; + +# Unknown. +ok pgettext ('none', 'Not translated'), 'Not translated'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03pgettext_xs.t b/tests/03pgettext_xs.t new file mode 100644 index 0000000..7d758ec --- /dev/null +++ b/tests/03pgettext_xs.t @@ -0,0 +1,91 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 8; + +use Locale::Messages qw (bindtextdomain textdomain gettext pgettext); +require POSIX; +require File::Spec; + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $locale_dir = $0; +$locale_dir =~ s,[^\\/]+$,, or $locale_dir = '.'; +$locale_dir .= '/LocaleData'; + +my $textdomain = 'existing'; +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); +Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + +my $bound_dir = bindtextdomain $textdomain => $locale_dir; + +ok defined $bound_dir; +ok (File::Spec->catdir ($bound_dir), File::Spec->catdir ($bound_dir)); + +my $bound_domain = textdomain $textdomain; + +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +my $missing_locale = 'locale de_AT missing'; +my $setlocale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; +} else { + require Locale::Util; + + $setlocale = Locale::Util::set_locale (POSIX::LC_ALL(), 'de', 'AT'); + if ($setlocale && $setlocale =~ /(?:austria|at)/i) { + $missing_locale = ''; + } +} + +# Default case. +skip $missing_locale, gettext ('View'), 'Anzeigen'; + +# Default context case. +skip $missing_locale, pgettext ('Which folder would you like to view?','View'), 'Ansicht'; + +# msgid eq msgstr. +skip $missing_locale, pgettext ('Which folder would you like to view? (2)','View'), 'View 2'; + +# Unknown. +ok pgettext ('none', 'Not translated'), 'Not translated'; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03textdomain_pp.t b/tests/03textdomain_pp.t new file mode 100644 index 0000000..5fef14a --- /dev/null +++ b/tests/03textdomain_pp.t @@ -0,0 +1,53 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 4; + +use Locale::Messages qw (textdomain); + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $textdomain = ''; +my $bound_domain = textdomain ''; +ok defined $bound_domain; +ok $bound_domain, 'messages'; + +$textdomain = 'existing'; +$bound_domain = textdomain $textdomain; +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/03textdomain_xs.t b/tests/03textdomain_xs.t new file mode 100644 index 0000000..5fef14a --- /dev/null +++ b/tests/03textdomain_xs.t @@ -0,0 +1,53 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 4; + +use Locale::Messages qw (textdomain); + +BEGIN { + my $package; + if ($0 =~ /_pp\.t$/) { + $package = 'gettext_pp'; + } else { + $package = 'gettext_xs'; + } + + my $selected = Locale::Messages->select_package ($package); + if ($selected ne $package && 'gettext_xs' eq $package) { + print "1..0 # Skip: Locale::$package not available here.\n"; + exit 0; + } + plan tests => NUM_TESTS; +} + +my $textdomain = ''; +my $bound_domain = textdomain ''; +ok defined $bound_domain; +ok $bound_domain, 'messages'; + +$textdomain = 'existing'; +$bound_domain = textdomain $textdomain; +ok defined $bound_domain; +ok $bound_domain, $textdomain; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/04find_domain_bug.t b/tests/04find_domain_bug.t new file mode 100644 index 0000000..b027d98 --- /dev/null +++ b/tests/04find_domain_bug.t @@ -0,0 +1,75 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 2; + +use Locale::Messages; +use POSIX; + +BEGIN { + plan tests => NUM_TESTS; +} + +# Jan Kratochvil described the following bug: When using any functions +# from Locale::TextDomain with a locale setting for a language that +# has no message catalog installed, __find_domain() from Locale::TextDomain +# will never look into the directories "LocaleData" again. It +# tries to bindtextdomain() to all search directories, and when it +# fails to find a translation for the emtpy string (should always be +# present), it will assume that this directory is not the one holding +# the mo files. +# +# This can actually only happen, when you switch languages behind the +# user's back. Fixed by checking for the presence of _any_ (g)mo file +# in the relevant directories. +BEGIN { + # Force language that is not supported. + Locale::Messages::nl_putenv ("LANGUAGE=en_US"); + Locale::Messages::nl_putenv ("LC_ALL=en_US"); + Locale::Messages::nl_putenv ("LANG=en_US"); + Locale::Messages::nl_putenv ("LC_MESSAGES=en_US"); + Locale::Messages::nl_putenv ("OUTPUT_CHARSET=iso-8859-1"); + + Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +} + +# Make sure that LocaleData/ can befound. +BEGIN { + unshift @INC, $1 if $0 =~ m#(.*)[\\\/]#; +} +use Locale::TextDomain ('existing'); + +ok "February" eq __"February"; + +Locale::Messages::nl_putenv ("LANGUAGE=de_AT"); +Locale::Messages::nl_putenv ("LC_ALL=de_AT"); +Locale::Messages::nl_putenv ("LANG=de_AT"); +Locale::Messages::nl_putenv ("LC_MESSAGES=de_AT"); + +my $missing_locale = Locale::Messages::setlocale (POSIX::LC_ALL() => '') ? + '' : 'locale de_AT missing'; + +my $locale = Locale::Messages::setlocale (POSIX::LC_ALL() => ''); +my $translation = Locale::TextDomain::__("February"); +skip $missing_locale, "Feber" eq $translation; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/04russian_plural_function.t b/tests/04russian_plural_function.t new file mode 100644 index 0000000..f1e0f46 --- /dev/null +++ b/tests/04russian_plural_function.t @@ -0,0 +1,54 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use Locale::gettext_pp; + +BEGIN { + plan tests => 2006; +} + +sub russian_plural { + my $n = shift; + + my ($plural, $nplurals); + + $nplurals = 3; + $plural = ($n % 10 == 1 && $n % 100 != 11 ? 0 : $n % 10 >= 2 && $n % 10 <= 4 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2); + + return ($nplurals, $plural ? $plural : 0); +} + +# This test uses private functions of Locale::gettext_pp. Do NOT use this as +# an example for your own code. + +my $code = 'nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2'; + +my $untainted = Locale::gettext_pp::__untaint_plural_header $code; + +ok length $untainted; + +my $plural_function = Locale::gettext_pp::__compile_plural_function $code; + +ok $plural_function; +ok ref $plural_function; +ok 'CODE' eq ref $plural_function; + +foreach my $n (0 .. 1000) { + my ($got_nplurals, $got_plural) = $plural_function->($n); + my ($wanted_nplurals, $wanted_plural) = russian_plural $n; + + ok $got_nplurals, $wanted_nplurals, + "wanted $wanted_nplurals, got $got_nplurals nplurals for n = $n"; + ok $got_plural, $wanted_plural, + "wanted plural form #$wanted_nplurals, got #$got_nplurals for n = $n"; + + + print "$n:$got_plural:$wanted_plural\n"; +} + diff --git a/tests/04scalar_noop.t b/tests/04scalar_noop.t new file mode 100644 index 0000000..9fb9b15 --- /dev/null +++ b/tests/04scalar_noop.t @@ -0,0 +1,54 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 5; + +use Locale::TextDomain; +use POSIX; + +BEGIN { + plan tests => NUM_TESTS; +} + +# When called in scalar context, N__() should return its argument, +# not a list. On the other hand, the other noop functions should +# simply returns their arguments, see +# https://rt.cpan.org/Ticket/Display.html?id=46471 for more. + +my $scalar; + +$scalar = scalar N__"foobar"; +ok 'foobar' eq $scalar; + +($scalar) = scalar N__"foobar"; +ok 'foobar' eq $scalar; + +$scalar = scalar N__n"one", "two", 4; +ok 3 eq $scalar; + +$scalar = scalar N__p"ctx", "foobar"; +ok 2 eq $scalar; + +$scalar = scalar N__np"ctx", "one", "two", 5; +ok 4 eq $scalar; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/05options.t b/tests/05options.t new file mode 100644 index 0000000..aaf48f0 --- /dev/null +++ b/tests/05options.t @@ -0,0 +1,38 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 3; + +require Locale::TextDomain; + +BEGIN { + plan tests => NUM_TESTS; +} + +my $keywords = Locale::TextDomain->keywords; +ok length $keywords; +my $flags = Locale::TextDomain->flags; +ok length $flags; +my $options = Locale::TextDomain->options; +ok length $options == (length $keywords) + (length $flags) + 1; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/05parse_accept.t b/tests/05parse_accept.t new file mode 100644 index 0000000..90a826e --- /dev/null +++ b/tests/05parse_accept.t @@ -0,0 +1,55 @@ +#! /usr/local/bin/perl -w + +# vim: syntax=perl +# vim: tabstop=4 + +use strict; + +use Test; + +use constant NUM_TESTS => 4; + +use Locale::Util qw (parse_http_accept_language parse_http_accept_charset); + +BEGIN { + plan tests => NUM_TESTS; +} + +my ($string, @items, $items); + +$string = "baz; q=0.1, foo, bar; q=0.7"; +@items = parse_http_accept_language $string; +$items = join '|', @items; +ok $items, "foo|bar|baz"; + +# Illegal language identifiers should be filtered out. +$string = "baz; q=0.1, illegal4this, foo, bar; q=0.7"; +@items = parse_http_accept_language $string; +$items = join '|', @items; +ok $items, "foo|bar|baz"; + +# The catch-all language is C. +$string = "baz; q=0.1, *; q=0.05, foo, bar; q=0.7"; +@items = parse_http_accept_language $string; +$items = join '|', @items; +ok $items, "foo|bar|baz|C"; + +$string = "baz; q=0.1, foo, bar; q=0.7"; +@items = parse_http_accept_charset $string; +$items = join '|', @items; +ok $items, "foo|bar|baz"; + +__END__ + +Local Variables: +mode: perl +perl-indent-level: 4 +perl-continued-statement-offset: 4 +perl-continued-brace-offset: 0 +perl-brace-offset: -4 +perl-brace-imaginary-offset: 0 +perl-label-offset: -4 +cperl-indent-level: 4 +cperl-continued-statement-offset: 2 +tab-width: 4 +End: diff --git a/tests/LocaleData/de/LC_MESSAGES/additional.mo b/tests/LocaleData/de/LC_MESSAGES/additional.mo new file mode 100644 index 0000000..1cfe527 Binary files /dev/null and b/tests/LocaleData/de/LC_MESSAGES/additional.mo differ diff --git a/tests/LocaleData/de/LC_MESSAGES/existing.mo b/tests/LocaleData/de/LC_MESSAGES/existing.mo new file mode 100644 index 0000000..bb02f4e Binary files /dev/null and b/tests/LocaleData/de/LC_MESSAGES/existing.mo differ diff --git a/tests/LocaleData/de_AT/LC_MESSAGES/additional.mo b/tests/LocaleData/de_AT/LC_MESSAGES/additional.mo new file mode 100644 index 0000000..eb3b044 Binary files /dev/null and b/tests/LocaleData/de_AT/LC_MESSAGES/additional.mo differ diff --git a/tests/LocaleData/de_AT/LC_MESSAGES/existing.mo b/tests/LocaleData/de_AT/LC_MESSAGES/existing.mo new file mode 100644 index 0000000..c9784db Binary files /dev/null and b/tests/LocaleData/de_AT/LC_MESSAGES/existing.mo differ diff --git a/tests/LocaleData/xy/LC_MESSAGES/additional.mo b/tests/LocaleData/xy/LC_MESSAGES/additional.mo new file mode 100644 index 0000000..104ae25 Binary files /dev/null and b/tests/LocaleData/xy/LC_MESSAGES/additional.mo differ diff --git a/tests/LocaleData/xy/LC_MESSAGES/existing.mo b/tests/LocaleData/xy/LC_MESSAGES/existing.mo new file mode 100644 index 0000000..fa3d4e9 Binary files /dev/null and b/tests/LocaleData/xy/LC_MESSAGES/existing.mo differ diff --git a/tests/LocaleData/xy_XY/LC_MESSAGES/additional.mo b/tests/LocaleData/xy_XY/LC_MESSAGES/additional.mo new file mode 100644 index 0000000..24f7315 Binary files /dev/null and b/tests/LocaleData/xy_XY/LC_MESSAGES/additional.mo differ diff --git a/tests/LocaleData/xy_XY/LC_MESSAGES/existing.mo b/tests/LocaleData/xy_XY/LC_MESSAGES/existing.mo new file mode 100644 index 0000000..6976525 Binary files /dev/null and b/tests/LocaleData/xy_XY/LC_MESSAGES/existing.mo differ diff --git a/tests/po/Makefile b/tests/po/Makefile new file mode 100644 index 0000000..77c42fb --- /dev/null +++ b/tests/po/Makefile @@ -0,0 +1,47 @@ +# Makefile for various po files. This Makefile is intended for the +# maintainer. No problem if you cannot run it on your system. + +srcdir = . +top_srcdir = .. + +LINGUAS = de de_AT xy xy_XY +PACKAGES = existing additional + +#CATALOGS = $(addsuffix .po, LINGUAS) +CATALOGS = $(LINGUAS) +MO_FILES = $(foreach pkg,$(PACKAGES), $(addprefix $(pkg)., $(addsuffix .mo, $(LINGUAS)))) + +MSGMERGE = msgmerge +MSGFMT = msgfmt +CATOBJEXT = .po + +all: default + +default: install + +install: $(MO_FILES) + cd $(srcdir); \ + targetdir='$(top_srcdir)/LocaleData'; \ + languages='$(LINGUAS)'; \ + packages='$(PACKAGES)'; \ + for package in $$packages; do \ + for lang in $$languages; do \ + dest="$$targetdir/$$lang/LC_MESSAGES/$$package.mo"; \ + cat="$$package.$$lang.mo"; \ + echo "installing $$cat as $$dest"; \ + cp -f $$cat $$dest && chmod 644 $$dest || exit 1; \ + done; \ + done + +update-mo: $(MO_FILES) + @echo "MO-FILES: $(MO_FILES)" + +clean: + rm -f $(MO_FILES) *~ + +.SUFFIXES: +.SUFFIXES: .po .mo + +.po.mo: + $(MSGFMT) --check --statistics --verbose -o $@ $< + diff --git a/tests/po/additional.de.po b/tests/po/additional.de.po new file mode 100644 index 0000000..1e3d8d3 --- /dev/null +++ b/tests/po/additional.de.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: libintl-perl-text 0.01\n" +"POT-Creation-Date: 2002-07-13 11:47+02:00\n" +"PO-Revision-Date: 1999-02-16 21:14+01:00\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%" +"10==4 ? 2 : 3);\n" + +# The Plural-Forms header is wrong on purpose. It is in fact the correct +# setting for Slovenian, but we abuse it here for testing ngettext and +# friends. +msgid "Singular" +msgid_plural "Plural" +msgstr[0] "Numerus 0" +msgstr[1] "Numerus 1" +msgstr[2] "Numerus 2" +msgstr[3] "Numerus 3" + +msgctxt "Context here (2)" +msgid "Singular" +msgid_plural "Plural" +msgstr[0] "Numerus 2:0" +msgstr[1] "Numerus 2:1" +msgstr[2] "Numerus 2:2" +msgstr[3] "Numerus 2:3" + +msgid "Sunday" +msgstr "Sonntag" + +msgid "Monday" +msgstr "Montag" + +msgid "Tuesday" +msgstr "Dienstag" + +msgid "Wednesday" +msgstr "Mittwoch" + +msgid "Thursday" +msgstr "Donnerstag" + +msgid "Friday" +msgstr "Freitag" + +msgid "Saturday" +msgstr "Samstag" + +msgid "Another View" +msgstr "Eine andere Ansicht ohne Kontext" + +msgctxt "Context" +msgid "Another View" +msgstr "Eine andere Ansicht mit Kontext" diff --git a/tests/po/additional.de_AT.po b/tests/po/additional.de_AT.po new file mode 100644 index 0000000..50555e1 --- /dev/null +++ b/tests/po/additional.de_AT.po @@ -0,0 +1,16 @@ +msgid "" +msgstr "" +"Project-Id-Version: libintl-perl-text 0.01\n" +"POT-Creation-Date: 2002-07-13 11:47+02:00\n" +"PO-Revision-Date: 1999-02-16 21:14+01:00\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%" +"10==4 ? 2 : 3);\n" + +msgid "Saturday" +msgstr "Sonnabend" + diff --git a/tests/po/additional.xy.po b/tests/po/additional.xy.po new file mode 100644 index 0000000..8fd8ea3 --- /dev/null +++ b/tests/po/additional.xy.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: libintl-perl-text 0.01\n" +"POT-Creation-Date: 2002-07-13 11:47+02:00\n" +"PO-Revision-Date: 1999-02-16 21:14+01:00\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Bogus\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%" +"10==4 ? 2 : 3);\n" + +# The Plural-Forms header is wrong on purpose. It is in fact the correct +# setting for Slovenian, but we abuse it here for testing ngettext and +# friends. +msgid "Singular" +msgid_plural "Plural" +msgstr[0] "Numerus 0" +msgstr[1] "Numerus 1" +msgstr[2] "Numerus 2" +msgstr[3] "Numerus 3" + +msgctxt "Context here (2)" +msgid "Singular" +msgid_plural "Plural" +msgstr[0] "Numerus 2:0" +msgstr[1] "Numerus 2:1" +msgstr[2] "Numerus 2:2" +msgstr[3] "Numerus 2:3" + +msgid "Sunday" +msgstr "Sonntag" + +msgid "Monday" +msgstr "Montag" + +msgid "Tuesday" +msgstr "Dienstag" + +msgid "Wednesday" +msgstr "Mittwoch" + +msgid "Thursday" +msgstr "Donnerstag" + +msgid "Friday" +msgstr "Freitag" + +msgid "Saturday" +msgstr "Samstag" + +msgid "Another View" +msgstr "Eine andere Ansicht ohne Kontext" + +msgctxt "Context" +msgid "Another View" +msgstr "Eine andere Ansicht mit Kontext" diff --git a/tests/po/additional.xy_XY.po b/tests/po/additional.xy_XY.po new file mode 100644 index 0000000..c4b6478 --- /dev/null +++ b/tests/po/additional.xy_XY.po @@ -0,0 +1,16 @@ +msgid "" +msgstr "" +"Project-Id-Version: libintl-perl-text 0.01\n" +"POT-Creation-Date: 2002-07-13 11:47+02:00\n" +"PO-Revision-Date: 1999-02-16 21:14+01:00\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Bogus\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%" +"10==4 ? 2 : 3);\n" + +msgid "Saturday" +msgstr "Sonnabend" + diff --git a/tests/po/existing.de.po b/tests/po/existing.de.po new file mode 100644 index 0000000..5e3ad96 --- /dev/null +++ b/tests/po/existing.de.po @@ -0,0 +1,76 @@ +msgid "" +msgstr "" +"Project-Id-Version: libintl-perl-text 1.12\n" +"POT-Creation-Date: 2002-07-13 11:47+02:00\n" +"PO-Revision-Date: 2005-08-10 19:02+03:00\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Singular" +msgid_plural "Plural" +msgstr[0] "Einzahl" +msgstr[1] "Mehrzahl" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "März" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Dezember" + +msgid "View" +msgstr "Anzeigen" + +msgctxt "Which folder would you like to view?" +msgid "View" +msgstr "Ansicht" + +msgctxt "Which folder would you like to view? (2)" +msgid "View" +msgstr "View 2" + +msgctxt "Context here (2)" +msgid "Singular" +msgid_plural "Plural" +msgstr[0] "Einzahl 2" +msgstr[1] "Mehrzahl 2" + +msgctxt "Context here (3)" +msgid "Singular 3" +msgid_plural "Plural 3" +msgstr[0] "Einzahl 3" +msgstr[1] "Mehrzahl 3" + diff --git a/tests/po/existing.de_AT.po b/tests/po/existing.de_AT.po new file mode 100644 index 0000000..ddda094 --- /dev/null +++ b/tests/po/existing.de_AT.po @@ -0,0 +1,16 @@ +msgid "" +msgstr "" +"Project-Id-Version: libintl-perl-text 1.12\n" +"POT-Creation-Date: 2002-07-13 11:47+02:00\n" +"PO-Revision-Date: 2005-08-10 19:01+03:00\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +msgid "January" +msgstr "J�nner" + +msgid "February" +msgstr "Feber" diff --git a/tests/po/existing.xy.po b/tests/po/existing.xy.po new file mode 100644 index 0000000..d59e769 --- /dev/null +++ b/tests/po/existing.xy.po @@ -0,0 +1,76 @@ +msgid "" +msgstr "" +"Project-Id-Version: libintl-perl-text 1.12\n" +"POT-Creation-Date: 2002-07-13 11:47+02:00\n" +"PO-Revision-Date: 2005-08-10 19:02+03:00\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Bogus\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Singular" +msgid_plural "Plural" +msgstr[0] "Einzahl" +msgstr[1] "Mehrzahl" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "März" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Dezember" + +msgid "View" +msgstr "Anzeigen" + +msgctxt "Which folder would you like to view?" +msgid "View" +msgstr "Ansicht" + +msgctxt "Which folder would you like to view? (2)" +msgid "View" +msgstr "View 2" + +msgctxt "Context here (2)" +msgid "Singular" +msgid_plural "Plural" +msgstr[0] "Einzahl 2" +msgstr[1] "Mehrzahl 2" + +msgctxt "Context here (3)" +msgid "Singular 3" +msgid_plural "Plural 3" +msgstr[0] "Einzahl 3" +msgstr[1] "Mehrzahl 3" + diff --git a/tests/po/existing.xy_XY.po b/tests/po/existing.xy_XY.po new file mode 100644 index 0000000..34805e4 --- /dev/null +++ b/tests/po/existing.xy_XY.po @@ -0,0 +1,16 @@ +msgid "" +msgstr "" +"Project-Id-Version: libintl-perl-text 1.12\n" +"POT-Creation-Date: 2002-07-13 11:47+02:00\n" +"PO-Revision-Date: 2005-08-10 19:01+03:00\n" +"Last-Translator: Guido Flohr \n" +"Language-Team: Bogus\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +msgid "January" +msgstr "J�nner" + +msgid "February" +msgstr "Feber"